2016-09-22 5 views
0

私は、動作するにはいくつかの情報が必要なディレクティブに取り組んでいます。しかし、その情報は約束から来ており、指令自体はその情報なしで読み込まれるため、指令自体に時間がかかるためです。ディレクティブリンクを実行する前にpromularデータを取得する

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と記入してください。

関連する問題