2

Я написал пользовательские директивы к значениям формата, Обычай директиве приводятся ниже«scope.watch не является функция» ошибка в Angular.js

var directiveapps = angular.module('myApp.currencyValues', []); 
directiveapps.directive('currencyValue', function() { 
return{ 
scope: { 
    data: '=items' 
}, 
template: '<div>$ {{value|number}}</div>', 
link: function(scope){ 
    scope.value = Math.round(scope.data* 100)/100; 
} 
}; 
}); 

Этой директива будет форматировать значение в валюту и также он округляет десятичные точки. И я назвал эту директиву подобным взглядом.

<div class="overallsummary_meter_txt left"> 
Total Price<br> 
<span currency-value items="totalPrice" class="orange_txt"></span> 
</div> 

Это прекрасно работает. Но я выяснил некоторые проблемы, когда значение передается в представление через ajax. Директива выполняется в самый момент загрузки вида, если значение требует времени для загрузки, тогда не будет никакого значения в переменной позиций. В результате этого я получаю пустое значение от директивы. Чтобы решить эту проблему, я немного изменил свою директиву, как показано ниже.

var directiveApps = angular.module('gogocarApp.currencyValues', []); 
directiveApps.directive('currencyValue', function() { 
return { 
transclude: true, 
scope: { 
    items: '=items' 
}, 
template: '<div>$ {{items|number}}<span ng-transclude></span></div>', 
link: function(scope){ 
    scope.watch('items', function() { 
    scope.items = scope.items ? Math.round(scope.items* 100)/100 : 0; 
    }); 
} 
}; 
}); 

я добавил scope.watch функцию а решить свои существующие issues.This отлично работает для всех моментов времени, и я получаю отформатирован и правильные значения в качестве выхода директивы.

Но как после эффекта этого, на каждой странице, которая использует эту директиву показывает консоль ошибки scope.watch не является функция

1.How я могу устранить эту ошибку консоли?

2. Нужно ли мне снова изменить директиву?

+4

Он должен быть '$ watch', а не' watch'. – str

+0

это 'scope. $ Watch', а не' $ scope.watch' – kukkuz

ответ

4

метод вахты назван как $watch. Сошлитесь документы: https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$watch

Таким образом, вы должны иметь:

scope.$watch('items', function() { 
    scope.items = scope.items ? Math.round(scope.items* 100)/100 : 0; 
}); 
+0

Я внес изменения в свой код, а ошибки консоли больше не существуют. Но некоторые страницы я получаю «0» в качестве результата директивы. Это может быть связано с выполнением директивы, прежде чем получать значения для переменных элементов. Но я включил эту область. $ Watch, чтобы преодолеть это. там любой другой способ решить все эти вопросы – basith

Смежные вопросы