2015-09-10 28 views
0

我在AngularJS中發現了奇怪的行爲。在我看來像一個錯誤,但也許是合理的。

我有一些價值,我傳遞給我的指令作爲屬性。在這個指令裏面,我看着$scope.$watch的參數。原來,如果我把ng-if放在這個指令中,並且條件是$watch將會被錯誤的舊值觸發(舊值==新值)。

我需要知道該值何時真正改變(以區別於初始運行時$watch被觸發而沒有改變)。如果這不是一個錯誤,那麼我怎麼能知道我的指令中舊值是否與當前值不同?

Here is the fiddle to show the problem

HTML代碼:

<div ng-controller="myCtrl"> 
    <select ng-model='myValue'> 
     <option>1</option> 
     <option>2</option> 
     <option>3</option> 
    </select> 
    <check-change value="myValue"></check-change> 
    <check-change value="myValue" ng-if="myValue==3"></check-change> 
</div> 

JS後端:

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

myApp.controller('myCtrl', function ($scope) { 
    $scope.myValue = 1; 
}); 

myApp.directive('checkChange', function() { 
    return { 
     restrict: 'E', 
     template: '<div>{{result}}</div>', 
     scope: { 
      value: '=' 
     }, 
     controller: directiveController 
    }; 
}); 

var directiveController = function ($scope) { 
    $scope.$watch('value', function (newVal, oldVal) { 
     $scope.result = 'Watch launched, result: ' + (newVal == oldVal); 
    }); 
}; 
+0

你應該總是在這裏SO張貼相關的代碼。人們不應該需要去異地資源來幫助你。記得鏈接腐 – Satpal

+0

@Satpal你說得對。完成。 – Episodex

回答

1

這是我從角JS合作者Narretz得到了答案:

當元素被破壞通過ng-if,這是範圍,因此觀察者也被破壞。當元素再次被渲染時,觀察者被再次初始化 - 這意味着它被調用相同的值,因爲它會觸發異常。

全螺紋here

相關問題