Javascript 范围变量在ng click处理程序中不可见
我对Angular还不太熟悉,我正试图找出这里出了什么问题。有一个控制器定义如下:Javascript 范围变量在ng click处理程序中不可见,javascript,angularjs,Javascript,Angularjs,我对Angular还不太熟悉,我正试图找出这里出了什么问题。有一个控制器定义如下: (function(){ function myController($scope, CommsFactory) { $scope.doSomething = function() { var x = $scope; // <- Doesn't work because $scope is not defined } }
(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);
})();
angular.module('aModule', [])
.controller('myController', myController);
(函数(){
函数myController($scope,CommsFactory){
$scope.doSomething=函数(){
var x=$scope;//如果您要声明一个模块,则需要添加[]
大概是这样的:
(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);
})();
angular.module('aModule', [])
.controller('myController', myController);
用法
angular.module(名称,[requires],[configFn]);
参数
- 名称。-要创建或检索的模块的名称
- 需要(可选)。-如果指定,则创建新模块。如果未指定,则检索模块以获取进一步信息
配置
- configFn(可选)。-模块的可选配置功能。与模块#config()相同
请,我建议您阅读有关角度模块的指南:
(函数(){
函数myController($scope){
$scope.doSomething=函数(){
var x=$scope;
控制台日志(x);
}
}
有棱角的
.module('aModule',[])
.controller(“myController”,myController);
})();
您在声明一个模块,然后需要添加[]
大概是这样的:
(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);
})();
angular.module('aModule', [])
.controller('myController', myController);
用法
angular.module(名称,[requires],[configFn]);
参数
- 名称。-要创建或检索的模块的名称
- 需要(可选)。-如果指定,则创建新模块。如果未指定,则检索模块以获取进一步信息
配置
- configFn(可选)。-模块的可选配置功能。与模块#config()相同
请,我建议您阅读有关角度模块的指南:
(函数(){
函数myController($scope){
$scope.doSomething=函数(){
var x=$scope;
控制台日志(x);
}
}
有棱角的
.module('aModule',[])
.controller(“myController”,myController);
})();
如中所示,您的代码通常运行良好
您的主要问题似乎在于使用$scope
$scope
是一个包含所有变量和方法的对象,这些变量和方法应该在相应的模板中可用。因此,您总是引用$scope的一个成员,而不是整个对象。
此外,John Papas AngularJS style guide建议使用controllerAs
,以支持$scope
,原因如下所述:
按照惯例,您还应该为控制器提供大写名称,并使用显式依赖项注入
典型的用例更像是:
(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!";
}
}
})();
您的代码通常运行良好,如中所示
您的主要问题似乎在于使用$scope
$scope
是一个包含所有变量和方法的对象,这些变量和方法应该在相应的模板中可用。因此,您总是引用$scope的一个成员,而不是整个对象。
此外,John Papas AngularJS style guide建议使用controllerAs
,以支持$scope
,原因如下所述:
按照惯例,您还应该为控制器提供大写名称,并使用显式依赖项注入
典型的用例更像是:
(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!";
}
}
})();
已解决:事实证明,我所经历的与Chrome调试器的工作方式有关。它似乎对在您中断的函数之外定义的变量进行了某种延迟加载(至少就我所描述的情况而言是这样)。这意味着,至少在我的例子中,如果我在方法内部中断,$scope实际上没有在该方法中使用(不幸的是,我做了很多工作,因为我试图验证$scope是否可见),然后调试器将报告$scope不可用。已解决:事实证明,我所经历的与Chrome调试器的工作方式有关。它似乎在延迟加载您中断的函数之外定义的变量(或者至少就我所描述的这一点而言)。这意味着,至少在我的例子中,如果我在方法内部中断,$scope实际上没有在该方法中使用(不幸的是,我做了很多工作,因为我试图验证$scope是否可见),然后调试器将报告$scope不可用。在您的代码中,$scope.x是未定义的索引。我将澄清:$scope本身不可见。我以它为例。我将进行编辑以更清楚地说明。@Gadzooks34您的行var x=$scope;
看起来有点奇怪。doSomething()的预期结果是什么
?我知道,我知道。这是一条虚线。重点是$scope本身在doSomething()中不可见。我的问题是:为什么?在您的代码中,$scope.x是未定义的索引。我将澄清:$scope本身不可见。我将以此为例。我将进行编辑以更清楚地说明。@Gadzooks34您的行var x=$scope;
看起来有点奇怪。doSomething()的预期结果是什么
?我知道,我知道。这是一条虚线。重点是$scope本身在doSomething()中不可见。我的问题是:为什么?关于这些括号,你是绝对正确的[]
,但是由于Gadzooks刚刚发布了他的代码片段,我假设模块声明发生在另一个文件中。关于这些括号,您完全正确[]
,但是Gadzooks刚刚发布了他的公司代码片段