Angular会在指令链接执行之前获取承诺数据

Angular get promise data before directive link execution

本文关键字:获取 承诺 数据 执行 指令 链接 Angular      更新时间:2023-09-26

我正在研究一个需要一些信息才能工作的指令。但是这些信息来自于承诺,而指令的加载却没有这些信息,因为它比指令本身花费更多的时间。

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

首先,你不能在指令的呈现和承诺之间做依赖关系,有一种方法,但这是一个反模式。你需要换个角度看问题。

例如,如果你希望scope.modelFilter只在承诺结束时填充,你可以在指令的link函数中创建一个监视器。观看配置文件过滤字段和内部回调填充modelFilter