我很確定我做錯了什麼,因爲我的角度很少有經驗。 也許答案已經在stackoverflow的某個地方了,我不是在問(正確搜索)正確的問題。
我有這個非常簡單的指令。這只是一個有四個狀態的跨度,我希望在跨度上的每次點擊都進行更改。每次點擊都會向前推進狀態,然後循環回去。每個州都有不同的CSS類。 每次更改指令的值時,我都希望父級模型中的值發生更改(因此隔離範圍聲明中的「=」,對吧?)。
我把一個值放在改變類的值上,以便每次值改變時都更新css類。
現在,問題是,當我點擊時,手錶被觸發newValue,但手錶再次觸發newValue等於點擊前的值。
我認爲這是與髒檢查和父控制器模型的連接有關的事情,但是,這樣做的正確方法是什麼?並且/或者獲得相同結果的方式更好,更有說服力?
這裏的指令:
.directive('square', function() {
return {
restrict: 'E',
transclude: true,
scope : {
value : '=',
},
link: function(scope, elm, attrs, ctrl) {
scope.valueToClass = function(value) {
var result = 'square-empty';
if (value == '1') {
result = 'square-temp';
} else if (value == '2') {
result = 'square-confirmed';
} else if (value == '3') {
result = 'square-critical';
}
return 'block-'+result;
}
scope.$watch('value', function(newValue, oldValue) {
scope.blockClass = scope.valueToClass(newValue)
}, true);
},
controller: function($scope, $element, $attrs) {
$scope.changeValue = function() {
$scope.value = ($scope.value+1) % 4;
}
},
template : '<span class="{{blockClass}}" ng-click="changeValue();">'+'</span>',
replace: true
};
});
請分享jsfiddle – 2013-04-04 10:07:23
同時,我試圖讓它在小提琴中工作。只是想知道是否有什麼明顯的錯誤。 – Duralumin 2013-04-04 10:10:40