Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 范围变量在ng click处理程序中不可见_Javascript_Angularjs - Fatal编程技术网

Javascript 范围变量在ng click处理程序中不可见

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 } }

我对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);
})();
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刚刚发布了他的公司代码片段