получить атрибут в функции $ наблюдения

0

Я был очень рад кодированию моей директивы, но мне нужен наблюдатель по атрибуту, который должен был срабатывать только в том случае, если предыдущее значение было "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'>&#8987;</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.

  • 0
    var original = attrs.attributeName ?
  • 0
    Ну, это очень похоже на «сохранить это для проверок», и, кроме того, я попробовал это в функции ссылки, и не сохранил это должным образом (получил неопределенный), поэтому мне пришлось хранить его в функции, которая изменила атрибут ,
Показать ещё 4 комментария
Теги:

1 ответ

0
$scope.$watch('someAttr',function(newValue,oldValue){
   if(oldValue === 'x'){
     // do something
   }
});
  • 0
    Я новичок в angular, но если я не ошибаюсь, $ scope. $ Watch используется для переменных в видимости, а attrs. $ Наблюдение за атрибутами в DOM-узле, это то, что мне нужно, отсюда и вопрос. Использование $ scope. $ Watch всегда будет возвращать «undefined», если вы добавите атрибут. Не уверен на 100%, просто поправьте меня, если я ошибаюсь
  • 1
    stackoverflow.com/a/14907826/3503831
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню