在指令链接执行之前的Angular get promise数据

时间:2016-09-22 21:17:20

标签: javascript angularjs angularjs-directive

我正在制定一项需要一些信息才能运作的指令。但是这些信息来自一个承诺,并且该指令在没有该信息的情况下加载,因为该指令本身需要更多时间。

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,的类似承诺。

1 个答案:

答案 0 :(得分:0)

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

例如,如果您希望仅在承诺结束时scope.modelFilter填充,您可以在指令的链接功能中创建一个观察者。观看配置文件过滤字段,并在回调内填充modelFilter