【发布时间】:2017-01-02 15:51:44
【问题描述】:
我正在将代码从 Angular 1.3 迁移到 Angular 1.5 组件和 ES6 控制器。我试图在 SO 上找到一些东西,但没有足够的帮助。除了下面提到的方式之外,关于如何在范围内观看事件所需的建议。或者如何从指令触发范围事件。如果存在替代方法,请提出正确的方法。
Angular 1.3
angular
.module('test')
.directive('test', function() {
return {
link: function(scope) {
scope.$on('$stateChangeStart', function(event, toState, toParams) {
//logic goes here..
});
}
}
});
Angular 1.5/ES6
class TestController {
/* @ngInject */
constructor($scope) {
this._$scope = $scope;
}
$onInit() {
this._$scope.$on('$stateChangeStart', (event, toState, toParams) => {
//logic goes here
});
}
}
angular
.module('test')
.component('test', {
controller: TestController
});
编辑:
对这里的 $on 而不是 $watch 的替代品感兴趣,因为 $onChange 可以在您只是观察变量时替换 $watch。我想监听范围事件,因为不是 100% 的 Angular 1.3 代码可以迁移到 1.5,我仍然有触发范围事件的指令!
【问题讨论】:
-
@georgeawg 我对这里的 $on 而不是 $watch 的替代品感兴趣,因为 $onChange 可以在您只是观察变量时替换 $on。我想听范围事件,因为不是 100% 的 Angular 1.3 代码可以迁移到 1.5,我仍然有触发范围事件的指令!
-
在作用域上触发事件的替代方法是使用表达式绑定将事件从组件传递到父组件。并使用单向绑定将事件以另一种方式从父组件传递到子组件。
-
@georgeawg 但父母仍然必须收听范围事件?有什么方法可以让我不使用 $scope.$on 并且仍然收听路由更改事件?或任何其他由 $rootscope 上的第三方组件触发的事件?
标签: javascript angularjs ecmascript-6 angularjs-1.5 angular-components