我对Angular很新,我想弄清楚这里有什么问题。有一个控制器定义如下:
(function(){
function myController($scope, CommsFactory) {
$scope.doSomething = function() {
var x = $scope; // <- Doesn't work because $scope is not defined
}
}
angular
.module('aModule')
.controller('myController', myController);
})();
然后通过点击按钮调用doSomething()方法:
<input type="button" ng-click="doSomething()" class="btn--link" value="do it"/>
这对我来说似乎很简单,但问题是,当我在方法中破解时,$ scope未定义。这与我见过的大多数例子不同,我无法弄清楚原因。这不应该是可见的吗?显然很多代码都丢失了 - 我试图只显示相关的部分 - 我可能会遗漏其他地方的某些内容吗?
答案 0 :(得分:2)
您声明模块,然后您需要添加 []
。
这样的事情:
angular.module('aModule', [])
.controller('myController', myController);
<强>用法强>
angular.module(name, [requires], [configFn]);
<强>参数强>
- name .- 要创建或检索的模块的名称。
需要(可选).- 如果指定,则创建新模块。如果未指定,则进一步检索模块 配置。
configFn(可选).- 模块的可选配置功能。与Module#config()相同。
请推荐阅读本指南关于Angular模块: angular.module
(function() {
function myController($scope) {
$scope.doSomething = function() {
var x = $scope;
console.log(x);
}
}
angular
.module('aModule', [])
.controller('myController', myController);
})();
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div data-ng-app="aModule">
<div data-ng-controller="myController">
<input type="button" ng-click="doSomething()" class="btn--link" value="do it" />
</div>
</div>
&#13;
答案 1 :(得分:0)
您的代码通常正常工作,如this fiddle中所示。
您的主要问题似乎在于$scope
的使用。 $scope
是一个对象,包含相应模板中应该可用的所有变量和方法。因此,您始终引用$ scope的成员,而不是整个对象。
此外,John Papas AngularJS风格指南推荐使用controllerAs
支持$scope
,原因有多种Y030
按照惯例,您还应该为控制器提供大写名称并使用显式依赖注入
典型的用例更像是:
(function(){
angular
.module('aModule', [])
.controller('myController', MyController);
MyController.$inject = ['$scope', 'CommsFactory'];
function MyController($scope, CommsFactory) {
var vm = this;
vm.doSomething = doSomething;
function doSomething() {
var $scope.x = "Did it!";
}
}
})();
答案 2 :(得分:0)
解决:事实证明,我所遇到的问题与Chrome调试器的工作方式有关。它似乎在你破坏的函数之外定义了一些延迟加载的变量(至少就我所描述的那样)。这意味着,至少在我的情况下,如果我在方法内部破坏,并且$ scope实际上并未在该方法中使用(不幸的是,我做了很多因为我试图验证$ scope是可见的),然后调试器将报告$ scope不可用。