2014-10-26 214 views
1

我正在使用controllerAs语法。AngularJS控制器继承:“this”未指向子控制器

我用$控制器继承父(更像基地或抽象)控制器。不久前我发现了这个question

我注意到,当我使用一个使用控制器属性(this.propName)的函数时,它不使用当前控制器this,而是使用父级控制器。这是一个demo (plunkr)

这里有一个gist到我的两个父控制器孩子控制器。

回答

1

更新sayMyName方法如下:

function sayMyName() { 
    alert(this.me); 
} 

当你正在试图挑选主控制器上me财产的警报应该从相应的实例挑me值,而不是实例被创建是vm

更新plunker link

+0

良好的渔获,'M e'是一个存储在闭包中的局部变量。 – dfsq 2014-10-26 19:53:31

1
var app = angular.module('myApp', []) 
app.controller('BaseController',function() { 
    this.me = 'Base'; 
    this.sayMe= function() { 
     alert(this.me); 
    } 
}); 
app.controller('ChildController', function($scope, $controller) { 
    var controller = $controller('BaseController as base', {$scope: $scope}); 
    angular.extend(this, controller); 
    this.me = 'Child'; 
});