2016-07-20 15 views
3

我想我的textfield被禁用,具體取決於引導下拉值。 所以我寫了這個ng-disabled引導下拉

下拉

<div class="dropdown"> 
<div ng-controller="dropDownCtrl"> 
<button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown"> 
{{selectedItem}}<span class="caret"></span> 
</button> 
<ul class="dropdown-menu" ng-model="dropDown"> 
<li ng-repeat="a in subjects"><a ng-click="dropboxitemselected(a)">{{a}}</a></li> 
</ul> 
</div> 

文本框

<div ng-controller="dropDownCtrl as ddc"> 
<label for="requester">Requester</label> 
<input type="text" class="form-control" ng-disabled="ddc.checker" ng-model="requester" id="requester" placeholder="requester" /> 
</div> 

和這裏的角控制器

app.controller('dropDownCtrl', function ($scope) { 

$scope.subjects = ['Yes','No']; 
this.checker=false; 
$scope.selectedItem; 

$scope.dropboxitemselected = function (item) { 
    $scope.selectedItem = item; 
    if($scope.selectedItem == "Yes") { 
     this.checker=true; 
     alert($scope.selectedItem); 
    } 
} 
}); 

以上所有的都在相同的代碼。 Alert告訴我函數被調用,但是textfield仍然被啓用。有人可以告訴我爲什麼嗎?謝謝!

+0

爲什麼叫上兩個'NG-controller'指令?我認爲他們都有自己的實例,所以他們自己的價值觀,這並不影響其他部分。 –

回答

1

每個控制器有它自己的範圍,並且每次調用ng-controller,你得到的控制器的新實例。

因此,checker變量不會在您指定控制器的兩個部分之間共享。

你可以測試一下,看看我的意思與此jsfiddle

+1

非常感謝! – user3713267

0

你可以嘗試創建一個返回checker值的函數,並用它在NG-殘疾人

$scope.disabledFunc = function() { 
    return this.checker //I would use $scope.checker... 
} 

然後:

<div ng-controller="dropDownCtrl as ddc"> 
<label for="requester">Requester</label> 
<input type="text" class="form-control" ng-disabled="disabledFunc()" ng-model="requester" id="requester" placeholder="requester" /> 
</div> 

無論如何,你爲什麼不使用$scope.checker代替this.checker?然後:ng-disabled="checker"

另一方面,我建議你使用角度路由來「鏈接」控制器與他們的意見。我認爲是最佳做法。

1

試試這個,如果它工作

app.controller('dropDownCtrl', function ($scope) { 

$scope.subjects = ['Yes','No']; 
$scope.checker=false; 
$scope.selectedItem; 

$scope.dropboxitemselected = function (item) { 
    $scope.selectedItem = item; 
    if($scope.selectedItem == "Yes") { 
     $scope.checker=true; 
     alert($scope.selectedItem); 
    } 
} 
});