我正在制定一项需要一些信息才能运作的指令。但是这些信息来自一个承诺,并且该指令在没有该信息的情况下加载,因为该指令本身需要更多时间。
angular.module('app').directive('tagInput', tagInput);
var tagInput = function ($timeout, profileService) {
var profileList = profileService.getProfileList();
profileList.then(function (profiles) {
var profileObject = {};
var profilesFiltered = [];
for(var index in profiles){
if(profiles[index].hasOwnProperty('id')){
var notStandard = profiles[index].id.match(/\d+/g);
if (notStandard != null) {
profileObject.icon = '<i class="fa fa-bookmark" aria-hidden="true"></i>';
}
else{
profileObject.icon = '<i class="fa fa-user" aria-hidden="true"></i>';
}
profileObject.name = profiles[index].name;
profileObject.identifier = profiles[index].id;
profileObject.ticked = false;
profilesFiltered.push(profileObject);
}
}
return profilesFiltered;
});
return {
restrict: 'EA',
require: 'ngModel',
scope: {
tags: '=ngModel',
searchParams: '=searchParams'
},
replace: false,
link: function ( scope, element, attrs ) {
scope.modelFilter = {
showSearchPanel: false,
inputProfiles: profilesFiltered,
...
这样,模板中的数据始终为空。如何在执行指令链接之前准备数据。也许我需要inputAccounts: accountsFiltered,
的类似承诺。
答案 0 :(得分:0)
首先,你不能在指令的渲染和promise之间做依赖,有一种方法,但这是一个反模式。你需要另一种观点。
例如,如果您希望仅在承诺结束时scope.modelFilter
填充,您可以在指令的链接功能中创建一个观察者。观看配置文件过滤字段,并在回调内填充modelFilter
。