我的 Javascript(Angular 自定义指令)如下:
var addedSubject = function($rootScope){
return{
restrict:'E',
templateUrl:'/static/html/marks_app/directives/added_subject_item.html',
replace:true,
scope:{
},
controller:["$scope", function($scope){
$scope.mySubjects = $rootScope.allSubjects;
console.log($scope.mySubjects);
}]
};
};
marksApp.directive('addedSubjectDirective', ["$rootScope",addedSubject]);
我的HTML如下:
<div class="modal-body">
<div class="form_body sub_results">
<div id="search_module_head" class="form_panels">
<div id="search_univ" >
<select id="form_sub_sel" autofocus form="form_sub_eval">
<option disabled selected>Select University</option>
<option value="ufs">University of the Free State</option>
</select>
</div>
<div id="search_code" class="form_panels">
<input type"text" id="search_code_input" ng-model="subFilter" placeholder="Enter Subject Code"></input>
</div>
</div>
<div class="search_results">
<div class="search_results_head">
<p>Search Results</p>
</div>
<div id="search_results_content">
<ul>
<search-result-list-item
ng-repeat="varsitySub in allUnivSubjects | searchFor:subFilter"
varsity-subject="varsitySub">
</search-result-list-item>
</ul>
</div>
</div>
</div>
<div id="added_sub_list">
<div class="added_sub_list_head">
<p>
Added Subjects
</p>
</div>
<div class="added_sub_list_body">
<ul>
<added-subject-directive ng-repeat="addedSub in mySubjects">
</added-subject-directive>
</ul>
</div>
</div>
</div>
问题是,当我在 HTML 上使用 ng-repeat 运行指令(added-subject-directive)代码时,代码拒绝工作。它没有在屏幕上显示任何内容,也没有记录我尝试从指令的 Javascript 记录的任何内容。但是,当我删除 ng-repeat 时,代码将按预期执行(尽管由于缺少 ng-repeat,但没有 ALL 所需的输出)。我已经拔掉了所有的头发,所以有人可以帮助我尝试理解在这种情况下我可能做错了什么吗?
最佳答案
一些事情。 ngRepeat
是一个终端指令。对于终端指令,当前优先级将是最后一组将执行的指令(当前优先级的任何指令仍将执行,因为相同优先级的执行顺序未定义)。请注意,指令模板中使用的表达式和其他指令也将从执行中排除。
ngRepeat
的优先级也为 1000。当在单个 DOM 元素上定义多个指令时,有时需要指定指令的应用顺序。优先级用于在调用编译函数之前对指令进行排序。优先级定义为一个数字。首先编译具有较高数字优先级的指令。预链接函数也按优先顺序运行,但后链接函数按相反顺序运行。具有相同优先级的指令的顺序是未定义
。默认优先级为0
。
为您的指令添加更高的优先级,以确保它首先运行。
var addedSubject = function($rootScope){
return{
restrict:'E',
templateUrl:'/static/html/marks_app/directives/added_subject_item.html',
replace:true,
priority: 1001, // added higher priority than ngRepeat
scope:{
},
controller:["$scope", function($scope){
$scope.mySubjects = $rootScope.allSubjects;
console.log($scope.mySubjects);
}]
};
};
marksApp.directive('addedSubjectDirective', ["$rootScope",addedSubject]);
关于javascript - ng-repeat 拒绝执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41384301/