2015-01-21 3 views
-2

Я искал и искал, пытался и пытался, но ничего не работает: у меня есть директива элемента с некоторыми атрибутами, например width = "width", и я изменяю эти атрибуты в контроллер на изменении размера события на окне, я установил привязку как «=», но если я смотрю «width», она работает один раз, но потом этого не происходит, я пробовал часы с истинным, попытался наблюдать на attrs, попытался изменить привязки, ничего не работает, никаких идей?Директива Angular.js не отвечает на изменения атрибутов

Может быть, я должен назвать дайджест или применить?

function Ctrl1($scope, $window) { 
$scope.width = $window.innerWidth; 
$scope.height = $window.innerHeight; 

angular.element($window).bind('resize', function() { 
    $scope.width = $window.innerWidth; 
    $scope.height = $window.innerHeight; 
    console.log($scope.width, $scope.height); 
}); 
$scope.name = 'angular'; 
$scope.counter = 0; 

$scope.myClick = function() { 
    $scope.height++; 
    $scope.width++; 
} 
} 

angular.module('myApp', []).directive('myElement', function() { 
return { 
    restrict: 'E', 
    scope: { 
     'width': '=', 
     'width': '=' 
    }, 
    template: '<button ng-click="myOtherClick()">From Directive</button>', 
    link: function(scope, iElement, iAttrs) { 

     scope.myOtherClick = function() { 
      scope.width++; 
      scope.height++; 
     } 
    } 
} 
}); 

http://jsfiddle.net/2y1brpzf/

+2

Нет кода, никакой помощи. –

+0

@JBNizet: добавлена ​​скрипка – user4478383

+0

Я просто попробовал и, похоже, работал в Chrome. Следует отметить, что у вас есть два атрибута ширины в области действия в директиве. –

ответ

0

Вы можете использовать эти два решения:

1. В вашей директиве, установите:

scope: { 
     width: '@', 
    }, 

, а затем сделать

attrs.$observe('width', function(passedId) { 

2. Используйте атрибут как функцию, в директиве:

$scope.$watch(function() { 
     return element.attr('width');//value to be watched; 
     }, function watchCallback(newVal, oldVal) { 
(..) 
} 

Эти два прекрасно работают в угловых 1.2.6.

+0

Пробовал этот, но не работает – user4478383

+0

Я думаю, что решил, что он добавляет $ scope. $ Digest(); – user4478383

0

Я решил добавить $ scope. $ Digest(); после обновления ширины и высоты в контроллере:

$scope.$digest(); 

http://jsfiddle.net/2y1brpzf/1/

+0

http://jsfiddle.net/cqpg5gvv/3/ без дайджеста, кажется, работает динамически (согласно моему комментарию выше) –

+0

@camden_kid, когда вы изменяете размер окна, которое вы динамически вносите в журнал, или также динамический html? Coz для меня он не работает без:/ – user4478383

+0

Да, он динамически регистрируется при изменении размера окна. :-) Я использую Chrome версии 39.0.2171.99 и в Firefox тоже. –

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