我在刷新/更新角度指令時遇到問題。基本上有一個標誌按鈕,將異步調用服務器,如果成功,更改屬性userFlags應禁用該按鈕,並將其文本更改爲「標記...」。角度指令不更新
這裏是指令:
app.directive('flagable', function() {
return {
restrict: 'E',
scope: { item: '=' },
templateUrl: '/Content/templates/flagable.tmpl',
controller: function($scope) {
$scope.flag = function() {
$scope.$apply(function() {
// ITS NOT GOING IN HERE!
//AJAX CALL HERE
model.$modelValue.userFlags = [];
Messenger().post("Your request has succeded! ");
});
};
}
};
});
這裏是模板:
<div class="btn-group pull-right">
<button class="btn btn-small btn-danger" ng-disabled="{{item.userFlags != null}}"><i class="icon-flag"></i>
<any ng-switch="item.userFlags==null">
<any ng-switch-when="true">Flag</any>
<any ng-switch-when="false">Flagged...</any>
</any>
</button>
<button class="btn btn-small btn-danger dropdown-toggle" data-toggle="dropdown" ng-disabled="{{item.userFlags != null}}"><span class="caret"></span></button>
<ul class="dropdown-menu">
<li><a href="#" ng-click="flag()">Inappropriate</a></li>
<li><a href="#" ng-click="flag()">Overpost</a></li>
<li><a href="#" ng-click="flag()">Spam</a></li>
</ul>
</div>
有趣的是,改變控制邏輯:
$scope.flag = function() {
$scope.item.userFlags = [];
Messenger().post("Your request has succeded! " + $scope.item.viewCount);
};
原因爲按鈕正確刷新到「已標記...」,但是,ng-d它不會使按鈕失效!在Firebug它表明了NG-disabled屬性設置: NG-禁用= 「真正的」
你看到錯誤? 'ngClick'開始一個'$ apply'調用,所以再次從click處理程序中執行這個操作是錯誤的。 –
只需將其更改爲$ scope.item.userFlags = [];郵件(「您的請求已成功!」+ $ scope.item.viewCount);並刪除範圍應用換行不會刷新該指令,但會出現警報。 – Val