我怎样才能访问"这个"在我的控制器中使用"控制器为"句法?

时间:2014-05-10 06:21:26

标签: javascript angularjs

我有以下代码:

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”解决方法?

2 个答案:

答案 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();
});