【发布时间】:2015-11-24 17:27:14
【问题描述】:
我正在使用 AngularJS 框架。我写了一些带有和不带有自己控制器的指令,它们有时会相互包含。
对于每门课程,我都使用自己的指令来打印其信息
<li ng-repeat="course in courses" on-courses-loaded="fetch_subscribed">
<course-info course="course"></course-info>
</li>
'on-courses-loaded' 属性正在寻找最后一个元素,我写它是为了在 ng-repeat 结束时做一些事情:准备一些数据,并为每个注册为 $rootScope.$ 的函数发出信号on('courses_available', function() {}) (范围
angular.module('app').directive('onCoursesLoaded', [
'$rootScope', function ($rootScope) {
return {
restrict: 'A',
link: function (scope, element, attr) {
if (scope.$last === true)
{
element.ready(function() {
// Prepare things, when done return promise and then ->
$rootScope.$broadcast('courses_available');
});
}
}
}
}]);
在课程信息指令中,调用了另一个指令
<subscribe code="course.code" triggered="true"></subscribe>
使用此代码
<div ng-show="available">
<button type="button" class="btn btn-success" ng-hide="subscribed" ng-click="subscribe()">
<span class="glyphicon glyphicon-ok"></span> Subscribe
</button>
<button type="button" class="btn btn-danger" ng-show="subscribed" ng-click="unsubscribe()">
<span class="glyphicon glyphicon-remove"></span> Unsubscribe
</button>
</div>
还有这个链接功能
if (scope.triggered === true)
{
console.log('wait for emit');
$rootScope.$on('courses_available', function() {
internals.getSubscribed();
});
}
else
{
console.log('do not wait for emit');
scope.$watch('code', function(value) {
internals.getSubscribed();
});
}
最大的问题是在subscribe 指令设置其$rootScope.$on('courses_available', ..) 之前发出信号
在这里你可以找到扩展的 HTML 伪代码
<li class="list-group-item" ng-repeat="course in courses | filter: search" on-courses-loaded="fetch_subscribed">
<!--<course-info course="course"></course-info> IS NEXT DIV-->
<div>
<!--<subscribe code="course.code" triggered="true"></subscribe> IS NEXT DIV-->
<div ng-show="available">
<button type="button" class="btn btn-success" ng-hide="subscribed" ng-click="subscribe()">
<span class="glyphicon glyphicon-ok"></span> Subscribe
</button>
<button type="button" class="btn btn-danger" ng-show="subscribed" ng-click="unsubscribe()">
<span class="glyphicon glyphicon-remove"></span> Unsubscribe
</button>
</div>
</div>
- 我需要在 ng-repeat 之后准备数据并发出信号
- 虽然 1.,来自 ng-repeat 的每个内容都必须订阅 $rootScope.$on() 并且在发出之前。
如果您有任何提示,谢谢大家。
【问题讨论】:
-
我推荐一个 jsFiddle 或 Plunker,这样人们就可以看到问题的发生。