gpt4 book ai didi

javascript - 如何监听 Angular 1.5 组件中的作用域事件?

转载 作者:数据小太阳 更新时间:2023-10-29 04:47:24 25 4
gpt4 key购买 nike

我正在将代码从 Angular 1.3 迁移到 Angular 1.5 组件和 ES6 Controller 。我试图在 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,我仍然有触发范围事件的指令!

最佳答案

作用域事件可以转换为服务中的 RX 可观察值。

 app.factory("rxLocationChangeStart", function($rootScope, rx) {
var rxLocationChangeStart = new rx.Subject();
$rootScope.$on("$locationChangeStart", function() {
rxLocationChangeStart.onNext(arguments);
});
return rxLocationChangeStart;
})

然后组件可以订阅这些事件:

 app.component("locationMonitor", {
scope: {},
template: ['<p>oldPath={{$ctrl.oldPath}}</p>',
'<p>newPath={{$ctrl.newPath}}</p>'].join(''),
controller: function (rxLocationChangeStart) {
var $ctrl = this;
var subscr = rxLocationChangeStart.subscribe(function(data) {
console.log("locationChangeStart ", data);
$ctrl.newPath = data[1];
$ctrl.oldPath = data[2];
});
this.$onDestroy = function() {
subscr.dispose();
};
}
})

Angular 2 用 RX Observables 替换了范围事件总线。将范围事件转换为 RX Observables 提供了从 AngularJS 到 Angular 2 的简单迁移路径。

DEMO on PLNKR .

关于javascript - 如何监听 Angular 1.5 组件中的作用域事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39158411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com