我是Angular的新手,但它似乎是儘可能避免DOM操作的「角度方式」。我不確定我是否採取了正確的方法。根據服務變量更改CSS
我在底部有三個按鈕(next,back和home)。這些通過其他控制器的動作獲得啓用和禁用。例如,如果文本框爲NULL,則在輸入內容之前下一個按鈕將被禁用。我有以下幾點:
<div ng-controller="nextBackController" class="navbar navbar-app navbar-absolute-bottom">
<div class="btn-group justified">
<a href="#/" class="btn btn-navbar btn-icon-only btn-bounded"><i class="fa fa-arrow-left fa-navbar" ng-class="{'btn-disabled' : btnBack}"></i> Back</a>
<a id="btnHome" ng-click="handleClick()" href="#/" class="btn btn-navbar btn-icon-only btn-bounded" ng-class="{'btn-disabled' : btnHome}"><i class="fa fa-home fa-navbar"></i> Home</a>
<a href="#/second" class="btn btn-navbar btn-icon-only">Next <i class="fa fa-arrow-right fa-navbar" ng-class="{'btn-disabled' : btnNext}"></i></a>
</div>
</div>
現在的JS:
app.service("nxtBackClick", function($rootScope, bottomButtonWatcher) {
this.btn = "";
this.broadcast = function(btn) {
//Toggle the Next button as an example
bottomButtonWatcher.btnNext = ~bottomButtonWatcher.btnNext;
//set the btn that is clicked
this.btn = btn;
$rootScope.$broadcast('bottomBtnClick');
};
});
app.service("bottomButtonWatcher", function($rootScope) {
//Set all these to disabled
this.btnHome = true;
this.btnNext = false;
this.btnBack = true;
});
而現在的控制器:
//####################### - Next Back Controller ########################
app.controller("nextBackController",
function($scope, nxtBackClick, bottomButtonWatcher){
$scope.btnHome = bottomButtonWatcher.btnHome;
$scope.btnNext = bottomButtonWatcher.btnNext;
$scope.btnBack = bottomButtonWatcher.btnBack;
$scope.handleClick = function(btn) {
nxtBackClick.broadcast(btn);
};
}
);
究竟什麼是您的問題 - 是這段代碼不工作? 「Angular Way」並不特別阻止DOM操作,但更喜歡通過使用指令來完成。 –
當我更新bottomButtonWatcher.btnNext時,我不認爲$ scope.btnNext也在更新,從而觸發CSS更改 – user3641212