Привязка значений с
$scope.minutes = 1
кng-bind="minutes"
не работает, когда я добавляюscope: {finishcallback: "&"},
в свою директиву.
Я пытаюсь реализовать таймер обратного отсчета с директивами Angular, но не могу установить значение оставшейся минуты и секунды для дочернего элемента span, когда я определяю функцию области действия в директиве.
<time id="countdown_{{order.Id}}" ng-if="order.StatusCode == 1" countdown="{{order.RemainingTimeToPrepareOrder}}" finishcallback="vm.countdownfinished(parameter)" callbackparameter="{{order.Id}}" countdownfinished="toggle()">
<b> <span class="value" ng-bind="minutes"></span> dakika <span class="value" ng-bind="seconds">--</span> saniye</b>
</time>
И вот мой код директивы.
function countdown() {
return {
restrict: 'A',
scope: {
finishcallback: "&"
},
controller: function ($scope, $attrs, $timeout) {
$attrs.$observe('countdown', function (value) {
var ds = new Date();
ds.setTime(value * 1000);
$scope.days = '-';
$scope.hours = $scope.minutes = $scope.seconds = '--';
$scope.timeout = $timeout(update, 1000);
function update() {
now = +new Date();
$scope.delta = Math.round((ds - now) / 1000);
if ($scope.delta >= 0) {
$timeout(update, 1000);
} else if ($attrs.countdownfinished) {
$scope.$apply($attrs.countdownfinished);
}
}
});
},
link: function ($scope, $element, $attrs) {
$scope.$watch('delta', function (delta) {
if (typeof delta === 'undefined') return;
if (delta < 0) {
delta = 0;
}
$scope.days = Math.floor(delta / 86400);
$scope.hours = forceTwoDigits(Math.floor(delta / 3600) % 24);
$scope.minutes = forceTwoDigits(Math.floor(delta / 60) % 60);
$scope.seconds = forceTwoDigits(delta % 60);
});
$scope.toggle = function () {
$scope.finishcallback({ parameter: $attrs.callbackparameter });
}
function forceTwoDigits(num) {
return String(num < 10 ? '0' + num : num);
}
}
}
}
Все функции работают, пока я не добавлю переменную области видимости finishcallback: "&"
в свою директиву. Я добавил это, чтобы включить вызовы пользовательских функций после завершения обратного отсчета. Но когда я добавляю это, мои назначения, такие как $scope.minutes
, перестали изменять значения в моих промежутках.
Как мне динамически изменять значения диапазона, даже если я определяю область действия в своей директиве?
ng-bind="minutes"
не работает, когда я добавляюscope: { finishcallback: "&" },
в свою директиву. @РубенХелслот - person Yusuf Duyar   schedule 13.10.2020