Angularjs 重新计算/重新初始化指令-异步数据获取后

Angularjs 重新计算/重新初始化指令-异步数据获取后,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我有一个类似这样的指令: function timeDisplay() { var directive = { restrict: "E", link: function (scope, element, attrs) { scope.tooltip = scope.minutes > 60 ? (scope.minutes / 60) + " hrs" : scope.minutes + " mins"; }

我有一个类似这样的指令:

function timeDisplay() {
    var directive = {
        restrict: "E",
        link: function (scope, element, attrs) {
            scope.tooltip = scope.minutes > 60 ? (scope.minutes / 60) + " hrs" : scope.minutes + " mins";
        },
        replace: true,
        template: "<abbr uib-tooltip='{{ tooltip }}'>{{ minutes }}</abbr>", 
        scope: {
            minutes: "="
        }
    };
    return directive;
}
函数时间显示(){
var指令={
限制:“E”,
链接:函数(范围、元素、属性){
scope.tooltip=scope.minutes>60?(scope.minutes/60)+“小时”:scope.minutes+“分钟”;
},
替换:正确,
模板:“{minutes}}”,
范围:{
分钟:“=”
}
};
返回指令;
}
在某些地方,如在
ng repeat
上,这可以正常工作。但在其他地方,我的页面控制器从服务器获取数据,而不是

问题似乎在于,在解析页面时,链接功能正在启动,因此当数据从服务器返回时,链接功能不会“重新运行”,因此工具提示从未设置,因为它第一次运行时的
分钟数
为空

当它在
ng repeat
中时,则仅当数据已经存在时才调用link函数,因此没有问题

如何重新运行链接函数,或者该指令遵循的更好模式是什么?

假设您有
。若修改对象,则不会再次调用链接函数。您可以做什么:

  • Best-rewrite指令,以便它监视对象(
    $scope.$watch('obj')
    ,在指令中),并在它更改时更新指令本身。(这就是ng bind、ng repeat……的工作方式)或者您可以使用事件
  • 如果您只收到一次对象-仅在以下情况下使用ng,即如果对象是承诺:
  • 
    
  • 可怜的假ng重复:
  • 
    
    在这里,将fakeArray分配给['anything']将删除旧元素并添加新元素

    <custom obj="object" ng-if="object.$resolved"></custom>
    
    <div ng-repeat="a in fakeArray">
        <custom obj="object"></custom>
    </div>