2016-07-20 19 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); 
    } 
} 
});