2016-09-22 43 views
0

我正在处理需要某些信息才能工作的指令。但是,这些信息来自诺言,并且指令加载时没有这些信息,因为指令本身需要更多时间。Angular在执行指令链接前获取承诺数据

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

首先,你不能在指令的渲染和承诺之间做一个依赖关系,有一种方法,但这是一个反模式。你需要另一个观点。

例如,如果您只想在承诺结束时填充scope.modelFilter,您可以在指令的链接函数内部创建一个观察器。观看配置文件过滤字段并在回调中填写modelFilter