Я был очень рад кодированию моей директивы, но мне нужен наблюдатель по атрибуту, который должен был срабатывать только в том случае, если предыдущее значение было "x". Проблема в том, что $observe
observ doesn't, кажется, не обеспечивает предыдущее значение, поскольку $watch
делает.
Есть ли быстрый способ доступа к предыдущему значению атрибута или мне нужно его хранить для проверок?
HTML:
<searcher ng-datasource = 'countries' ng-model = 'chosenCountry' placeholder = 'Search Country' ng-alias = 'country' ng-tuples = 'country as country.name' ng-rows-by-page = 2>
JS
app.directive("searcher", function($datasources, $document){
return {
restrict: 'E',
require: '?ngModel',
scope: {
ngModel: '='
},
replace:true,
template:
"<md-select ng-attr-active = '{{hasFocus}}' ng-attr-empty = '{{!searchText}}'>"+
" <md-input ng-click = 'handleClick();'>"+
" <a class = 'fa fa-search icon' ng-if = '!searchPromise'></a>"+
" <a class = 'fa fa-spin icon' ng-if = 'searchPromise'>⌛</a>"+
" <input type = 'text' ng-model = 'searchText' ng-keydown = 'handleKeydown()' ng-focus='handleFocus()'>"+
" </md-input>"+
" <ul>"+
" <li ng-repeat = 'row in __rows track by $index' ng-click = 'choose(row)'>{{txt(row)}}</li>"+
" </ul>"+
"</md-select>"+
"",
link: function( scope, element, attrs, ctrl ) {
....
attrs.$observe("active", function(newValue){
if ( newValue == "false" ){
ctrl.$setTouched();
}
});
...
Игнорировал остальную часть кода, как не относящуюся к моему вопросу. Если вам нужен полный рабочий пример: http://codepen.io/sergio0983/pen/XKEQqg?editors=1010
Обратите внимание, что в рабочем примере вы можете найти немного другой код (я использовал функцию фокусировки для сохранения атрибута после первого взаимодействия), который уже работает. Я только хочу знать, могу ли я каким-либо образом получить доступ к предыдущему значению атрибута в $ register.
$scope.$watch('someAttr',function(newValue,oldValue){
if(oldValue === 'x'){
// do something
}
});
var original = attrs.attributeName
?