2015-12-03 116 views
2

我正在使用Angular +打字稿+ RequireJS。在我配置了所有设置后,简单的ng-click对我来说不起作用,并且在错误日志中没有错误。角度与打字稿控制器

你们知道我在做什么错吗? 任何帮助将不胜感激

enter image description here

我的文件:

的index.html

<html> 
<head> 

</head> 
<body> 
    <div ng-controller="MasterController"> 
     <button ng-click="toggleModal()">777777777777</button> 
    </div> 
    <script src="Script/lib/require.js" type="text/javascript" data-main="Script/main.js"></script> 
</body> 
</html> 

Controllers.ts

/// <reference path="../lib/typings/angular.d.ts" /> 
/// <reference path="../lib/typings/jquery.d.ts" /> 

import angular = require("angular"); 

export var controllerModule = angular.module("controllers", []); 

MasterController.ts

/// <reference path="../lib/typings/angular.d.ts" /> 
/// <reference path="../lib/typings/require.d.ts" /> 
/// <reference path="controllers.ts" /> 

import MasterControllerModule = require("Controllers"); 
class MasterController { 

    modalShown: boolean = true; 
    constructor() { 
    } 

    toggleModal() { 
     alert(777); 
     this.modalShown = !this.modalShown; 
    } 

} 
MasterControllerModule.controllerModule.controller("MasterController", MasterController); 

main.js

require.config({ 

    paths: { 

     'angular': 'lib/angular', 
     'domReady': 'lib/domReady', 
     'app': 'app', 
     'Jquery': 'lib/jquery' 
    }, 
    //waitSeconds: 0, 
    shim: { 
     'angular': { 
      exports: 'angular' 
     } 
    }, 

    deps: [ 
     // kick start application... see bootstrap.js 
     './bootstrap' 
    ] 
}); 

require([ 
    'angular', 
    'app', 
    'domReady', 
    'controllers/Controllers', 
    'controllers/MasterController', 
    'Jquery' 
]) 

app.js

define(['angular', 
'controllers/Controllers'], function (angular) { 
    return angular.module('app', ['controllers']); 
}); 

bootstrap.js

define([ 
    'require', 
    'angular', 
    'app' 
], function (require, ng) { 
    'use strict'; 

    require(['domReady!'], function (document) { 
     ng.bootstrap(document, ['app']); 
    }); 
}); 
+2

你检查脚本中得到加载,例如,Chrome浏览器开发工具? –

+0

在角提示我看到这个错误:模块创建,但从未加载 –

回答

0

我认为这是在控制器类的问题。当您使用指令ng-click时,它会尝试执行查看控制器$scope内部的功能。

您定义的类不注入该依赖关系,并且与$scope无关;这就是为什么没有工作的(在$scope没有叫toggleModal方法可以导入$scope是这样的:如果你创建ctrl范围对象,然后在你看来,你将需要调用它像这样

class MasterController { 

    modalShown: boolean = true; 
    static $inject = ['$scope'] 
    constructor($scope) { 
     $scope.ctrl = this 
    } 

    toggleModal() { 
     alert(777); 
     this.modalShown = !this.modalShown; 
    } 
} 

<button ng-click="ctrl.toggleModal()">777777777777</button> 

看看从Bresarat阿里YouTube频道this视频以了解更多信息

0

使用控制器的语法:

<div ng-controller="MasterController as vm"> 

然后调用点击方法,像这样:

vm.toggleModal()