Angular.js指令没有响应属性的更改

时间:2015-01-21 13:12:02

标签: angularjs

我已经搜索,搜索,尝试过但似乎没有任何效果:我有一个带有一些属性的元素指令,例如width =" width"并且我在控制器上的窗口上的resize事件中更改了这个属性,我已将绑定设置为" ="但如果我注意宽度'它工作一次,但事实并非如此,我试过手表真实的,尝试观察attrs,尝试更改绑定,没有任何作用,任何想法?

也许我应该打电话给摘要或申请?

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 :(得分: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中工作正常。

答案 1 :(得分:0)

我已经解决了它添加$ scope。$ digest();在控制器中更新宽度和高度后:

$scope.$digest();

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