我有一个像这样的指令:
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;
}
在某些地方,例如在ng-repeat
上,这样可行。但在其他地方,我的页面控制器从服务器获取数据,但事实并非如此。
问题似乎是在解析页面时链接函数正在触发,因此当数据从服务器返回时,链接函数不会“重新运行”,因此工具提示永远不会被设置,因为第一次运行时minutes
是空的。
当它在ng-repeat
时,只有当数据已经存在时才调用链接函数,所以没关系。
如何重新运行链接功能,或者该指令的更好模式是什么?
答案 0 :(得分:0)
假设你有<custom obj="object"></custom>
。如果修改对象,则不会再次调用链接函数。你能做什么:
$scope.$watch('obj')
)以及它是否更改指令更新本身。 (这是ng-bind,ng-repeat,...的工作原理)或者你可以使用事件。<custom obj="object" ng-if="object.$resolved"></custom>
<div ng-repeat="a in fakeArray"> <custom obj="object"></custom> </div>
这里将fakeArray分配给['anything']将删除旧元素并添加新元素。