Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS在未选择时提前键入_Angularjs - Fatal编程技术网

AngularJS在未选择时提前键入

AngularJS在未选择时提前键入,angularjs,Angularjs,我已经在前面添加了角度引导的类型。它工作得很好,我想给它添加一个功能。因此,当选择一个项目时,我只想在Typeahead中选择某个项目时切换其他组件的禁用状态。问题是,如果我在第一个Typeahead中键入某个内容,而我没有选择任何内容,那么它不会触发任何事件 下面是组件的html。我想问的是,为了实现这个功能,我应该听哪个事件 <div class="form-group has-feedback" ng-controller="CitiesSearchController">

我已经在前面添加了角度引导的类型。它工作得很好,我想给它添加一个功能。因此,当选择一个项目时,我只想在Typeahead中选择某个项目时切换其他组件的禁用状态。问题是,如果我在第一个Typeahead中键入某个内容,而我没有选择任何内容,那么它不会触发任何事件

下面是组件的html。我想问的是,为了实现这个功能,我应该听哪个事件

<div class="form-group has-feedback" ng-controller="CitiesSearchController">
            <input type="text" id="cityCombo" ng-model="selectedCityName" placeholder="City"
                   data-typeahead="cities.CityName for cities in getCities($viewValue)"
                   data-typeahead-loading="loadingCities"
                   data-typeahead-min-length="1"
                   data-typeahead-wait-ms="0"
                   data-typeahead-on-select="onCitySelect($item, $model, $label)"
                   class="form-control" />
            <span ng-show="loadingCities" class="glyphicon glyphicon-refresh form-control-feedback"></span>
        </div>


我想的是:我可以触发一个改变了的事件。因此,每当文本被更改时,它就会激发并触发事件,并在此基础上禁用其他组件。这是正确的方法吗?

您可以通过在
selectedCityName
上调用
$watch
订阅ng型号值的更改:

此处的工作插销:

这里需要注意的一件非常重要的事情是,在我的示例中,我设置了
typeahead editable=“false”
,以防止无效选择,并将它们限制在原始数组中的选择。因此,除非做出有效选择,否则$watch事件将不会触发。当然,您可以将其更改为
true
,但这将允许在
ng模型中输入任何我认为无效的虚拟输入


我希望这有帮助。

你能再解释一下吗?当用户不从列表中选择时,您希望发生什么?每当编辑文本时(即未进行选择时),我希望禁用其他组件。所以这里我选择了城市,所以除非选择了一个城市,否则我希望区域框被禁用。当然,只有在选择了一个城市的情况下,才能进行填充。请参阅我对上面John C.的评论。为什么不换一种方式呢?禁用控件并仅在有效选择时启用它们?@Diananasar如果用户做出有效选择,然后决定继续键入,则将启用控件。听起来好像huber.duber希望在用户键入时禁用所有内容。@JoshC。没错,但他不能点击任何东西。如果他输入了无效值,他们将立即被禁用;因此,即使它们确实被启用,它们也会立即被启用,并且不会产生任何效果,因为用户将无法单击/输入任何内容。如果我将上述语句切换为:$scope.isDisabled=value,您的解决方案对我的场景有效?假:真;
  $scope.$watch("selectedCityName", function(value) {

      $scope.isDisabled = value ? true : false;

  });