关于$scope
和this
使用 ui-router 时,
如果我使用controllerAs
语法,即:
.config(['$stateProvider', function($stateProvider) {
$stateProvider
.state('app.login', {
url: '/login',
templateUrl: 'modules/login/login.html',
controllerAs: 'login',
controller: 'LoginCtrl',
data: {
authorizedRoles: [USER_ROLES.all]
}
});
}])
然后在我的控制器中,我使用this
而不是$scope
. 所以我的登录控制器中有这样的代码:
this.func1 = func1;
this.func2 = func2;
this.message = "Hello world!";
但我也$scope
用来收听来自 my 的全球广播事件$rootScope
,因为如果我没记错的话,即使它们正在互换,this
也没有属于 的方法。$scope
$scope.$on('event', handler);
所以我正在收听一个事件广播$rootScope
并调用其他一些控制器逻辑,例如func2
,当这个事件被广播时:
$scope.$on('auth-login-failed', function(event) {
// call some other function in controller
});
如果我想func2
在处理程序内部调用$on
怎么办?我应该做一些约定,在我的控制器中初始化这样的东西吗?
var that = this;
$scope.$on('auth-login-failed', function(event) {
this.func2();
});
我只是对最好的进行方式以及这里的一般约定感到好奇。$scope
两者都使用和是否合适,两者this
之间的主要区别是什么,因为它们可以互换?