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函数,因此没有问题
如何重新运行链接函数,或者该指令遵循的更好模式是什么?假设您有
。若修改对象,则不会再次调用链接函数。您可以做什么:
$scope.$watch('obj')
,在指令中),并在它更改时更新指令本身。(这就是ng bind、ng repeat……的工作方式)或者您可以使用事件
在这里,将fakeArray分配给['anything']将删除旧元素并添加新元素
<custom obj="object" ng-if="object.$resolved"></custom>
<div ng-repeat="a in fakeArray">
<custom obj="object"></custom>
</div>