Смотреть на атрибут директивы

Я хочу посмотреть на макс, если значение макс меняется, то должно появиться предупреждение

<div ng-controller='MyController' ng-app="myApp">
<div>{{title}}</div>
<input id='txt' type='text' max="{{max}}" value="{{max}}" foo/>
<input type="button" ng-click="changeMax()" value='change max' />

 scope: {
        max: '@',
    },
    link: function(scope, element, attrs) {
        /*scope.$watch(attrs.max, function() {
            alert('max changed to ' + max);
        });*/

        attrs.$observe('max', function(val) {
            alert('max changed to ' + max);
        });
    }

Я понятия не имею, какую ошибку я делаю. Я пробовал и $watch, и $ наблюдать, но не сработало. Пожалуйста, любой может помочь.

JS FIDDLE демо

1 ответ

Решение

Пожалуйста, проверьте этот рабочий код.

var app = angular.module('myApp', []);

app.directive('foo', function() {
    return {
        restrict: 'EA',
        scope: {
            max: '@',
        },
        link: function(scope, element, attrs) {
            /*scope.$watch(attrs.max, function() {
                alert('max changed to ' + max);
            });*/

            attrs.$observe('max', function(val) {
                alert('max changed to ' + val);
            });
        }
    }
});

app.controller('MyController', ['$scope', function($scope) {
    $scope.title = 'Hello world';
    $scope.max = 4;
    $scope.changeMax = function() {
        $scope.max += Math.floor(Math.random() * 10);
    }
}]);
    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.14/angular.min.js" ></script>
   <div ng-controller='MyController' ng-app="myApp">
        <div>{{title}}</div>
        <input id='txt' type='text' max="{{max}}" value="{{max}}" foo/>
        <input type="button" ng-click="changeMax()" value='change max' />
    </div>

Другие вопросы по тегам