gpt4 book ai didi

angularjs - 一次性绑定(bind)到自定义属性指令

转载 作者:行者123 更新时间:2023-12-02 11:26:05 25 4
gpt4 key购买 nike

我正在使用基于特定属性(相对)的自定义指令的 Angular 一次性绑定(bind)

这是我的指令:

app.directive('relative', ['$timeout', '$filter', '$compile', function ($timeout, $filter, $compile) {
var dateFilter = $filter('date');

return {
restrict: 'A',
scope: {
datetime: '@'
},
link: function ($scope, $element, $attributes) {
var timeout;

$scope.$watch('datetime', function (dateString) {
$timeout.cancel(timeout);

var date = (dateString || $element.text()) * 1000;
if (!date) return;
date = new Date(date);
if (!date) return;

function update() {
var reference = new Date();
$element.text(prettyDate(date));

//Calculate the next update
var diff = Math.abs(date - reference) / 1000;
var delta;
if (diff < 45) {
delta = 45 - diff;
} else if (diff < 90) {
delta = 90 - diff;
} else if (diff < 45 * 60) {
delta = 60 - (diff + 30e3) % 60;
} else {
delta = 3660 - diff % 3600;
}

timeout = $timeout(update, delta * 1000);
}

update();

$element.on('$destroy', function () {
$timeout.cancel(timeout);
});
});
}
};
}]);

这就是我使用它的方式:

 <time relative datetime="{{ notice.date }}"></time>

或者:

 <time relative datetime="{{ ::notice.date }}"></time>

问题是:在使用一次性绑定(bind)时,如果该值永远不会改变,如何避免创建日期时间属性的监视? Angular 会自动执行此操作吗?

最佳答案

我认为this是您正在寻找的解决方案。

您可以通过属性获取日期时间值,而不是通过范围对象接受它。这将避免创建不需要的 watch 。无论如何,您不希望该值发生变化,因此它实际上不会产生太大影响。

关于angularjs - 一次性绑定(bind)到自定义属性指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34528690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com