监听来自指令内控制器的广播事件
Listen for broadcast event from controller within directive
我有一个控制器,当一些内容加载时广播一个事件,像这样
angular.module('myApp')
// Using rootScope now
.controller('SubCtrl', ['$rootScope', '$scope', '$http', function ($rootScope, $scope, $http) {
$http.get('/scripts/data/content.json')
.then(function(response) {
$scope.content = response.data;
$rootScope.$broadcast('dataloaded');
});
}]);
在matchHeight指令中,我正在监听数据加载的事件
angular.module('myApp')
.directive('matchHeight', ['$timeout', function ($timeout) {
var linkFunction = function(scope, element, attrs) {
scope.$on('dataloaded', function() {
$timeout(function() {
angular.element(element).matchHeight(attrs);
});
});
};
return {
restrict: 'A',
link: linkFunction
};
}]);
我使用ui-router来管理状态这是HTML
<div class="row usps">
<div class="col-sm-4 usp-block" ng-repeat="block in content.marketing" match-height>
// Inner HTML
</div>
</div>
广播事件不会从指令中获取。我做错了什么?
因为你在ngRepeat
内部,内容只会在广播触发器之后呈现,所以指令会。然后你的指令链接将只订阅事件,但它不会执行,因为它已经执行之前,ngRepeat
完成渲染你的指令。
为了解决这个问题,ngRepeat
将在每次更改数组时重新创建您的列表,指令将在必要时始终被重建,因此您不必收听事件。
angular.module('myApp')
.directive('matchHeight', ['$timeout', function ($timeout) {
var linkFunction = function(scope, element, attrs) {
$timeout(function() {
angular.element(element).matchHeight(attrs);
});
};
return {
restrict: 'A',
link: linkFunction
};
}]);
相关文章:
- 推送器:无法广播客户端事件
- AngularJS:在rootScope上广播/发出的事件多次发生
- 什么'是在AngularJS中处理应用程序状态和事件广播的最佳实践
- AngularJs-向单个控制器广播事件
- AngularJS:只将事件从父级广播给它的子级
- angular js,广播一个事件并等待它完成
- 如何将 AngularJS 事件重新广播到子范围
- 广播事件-工作良好的服务器端,但不是在客户端
- 事件广播到特定用户(套接字).Io, redis, node)
- 监听来自指令内控制器的广播事件
- 如何广播事件到一个元素从rootScope在聚合物
- 如何取消注册或销毁$广播事件
- 使用d3.在d3组件之间调度广播事件
- AngularJs 广播事件
- AngularJS 1.5中的组件不监听$scope中的广播事件
- 角度 - 没有 HTML 和广播事件的控制器
- 如何在JavaScript(或jQuery)中实现自定义广播事件
- AngularJS:如何避免-从app.js调用的广播事件被触发两次
- AngularJS - 在广播事件后更新指令的视图
- 监听angularjs以非angular的方式广播事件