我有以下代码:
var app = angular.module('plunker', []);
app.controller('ParentCtrl', function($scope) {
$scope.name1 = 'Parent';
this.name1 = 'Parent';
});
app.controller('ChildCtrl', function($scope) {
$scope.name1 = 'Child';
this.name1 = 'Child';
this.option = {};
this.option.abc = 25;
foo = function(){
alert(this.option)
};
foo();
});
当我尝试在该功能可用之前访问“this”时。当我尝试访问函数内部时,它是未定义的。有人能告诉我是否有“AngularJS”解决方法?
答案 0 :(得分:2)
如果您正在使用Controller As
语法,则声明如下:
$scope.name1 = 'Child';
this.name1 = 'Child';
是多余的。当您指定' As' angular会将在此定义的所有属性复制到$ scope变量。
至于为什么this
在您的函数中不起作用。 this关键字指的是函数的执行上下文。正如你所声明的那样,没有上下文。要使this
符合您的预期,您可以这样做:
this.foo = function(){...this is this...}
或者如果您不希望在范围内公开它。您可以使用模块显示模式。
var self = this;
function foo(){...self is 'this'...};
答案 1 :(得分:1)
您需要在函数的开头保留对此的引用并使用它。 this
我相信你的功能的背景是全局窗口。这一切都取决于函数的调用方式以及定义的位置。
app.controller('ChildCtrl', function($scope) {
var self=this;
$scope.name1 = 'Child';
this.name1 = 'Child';
this.option = {};
this.option.abc = 25;
foo = function(){
alert(self.option)
};
foo();
});