'控制器'单独定义返回不是函数,未定义

时间:2016-12-28 05:13:10

标签: javascript angularjs

不知道为什么这次不起作用。以前每次工作的地方都会产生这样的问题......

这里我喜欢 app.js

python pip install packagename

查看文件 index.html

var testApp= angular.module('test',[]);

testApp.controller('testCtrl',function($scope){
$scope.testValue='testttttttttt';
})

它工作很好 ..

当我单独制作控制器文件并在视图中调用它时

<div ng-app="test" ng-controller="testCtrl">
{{testValue}}
</div>

它返回非功能,未定义 ...

但如果在 app.js 我转换

<div ng-app="test" ng-controller="testCtrl">
    {{testValue}}
    </div>
<script src="testCtrl.js"></script>

var testApp= angular.module('test',[]);

它再次起作用..

这里,主要问题是什么?像这样,我无法通过任何依赖..任何建议请...

2 个答案:

答案 0 :(得分:3)

您正在声明并重新声明模块的全局变量。这个全局变量可能会被提升或者其他一些javascript执行巫术会使你的代码以不可预测的方式运行。为了防止这种情况,只需使用angular的内置模块getter调用,而不是在全局命名空间中声明它。

像这样:

App.js

angular.module('testApp', [
    // dependencies here'
]);

TestCtrl.js

angular.module('testApp')
    .controller(function($scope) {
        $scope.testValue = "value";
    });

同样,这里的重要区别是angular.module('testApp', [])与第二个参数(依赖列表)创建一个新模块,覆盖之前的testApp。另一方面,angular.module('testApp')在没有第二个参数的情况下调用检索模块,以便您可以向其添加更多指令/ controllers / config / constants。

另外,你应该放弃独立控制器,因为它们不再被认为是最佳实践。指令/组件路由现在更多 in vogue

有关当前角度最佳实践的简要概述,请查看John Papa的https://github.com/johnpapa/angular-styleguide/blob/master/a1/README.md

答案 1 :(得分:0)

加载app.js文件后放置控制器文件。

所以app.js的内容将是,

var testApp= angular.module('test',[]);

Controller.js将是,

angular.module('test').controller('testCtrl',function($scope){
$scope.testValue='testttttttttt';
})

在index.html中,订单将是,

<script src="app.js"></script>
<script src="testCtrl.js"></script>

<强> DEMO