javascript - 如何在网页中以单一表单和单一 Controller 实现 Angular js Material 的两个md-autocomplete?

标签 javascript angularjs autocomplete angularjs-material

我在一页中需要两个 md-autocomplete,因此根据 Angular js Material 文档,我在表单中包含两个 md-autocomplete, 用于车辆的公司名称和车辆型号的其他名称,但是当我从第一个 md-autocomplete 中选择车辆名称时 第二个 md-autocomplete 出现一个 [object Object] 值。那么我该如何修改它的js函数呢?

<!--Html Code-->
<md-autocomplete  required='' ng-disabled="isDisabled" md-no-cache="noCache" md-selected-item="selectedItem" md-search-text-change="searchTextChange(searchText)" md-search-text="searchTextModel" md-selected-item-change="selectedItemChange(item)" md-items="item in querySearch(searchTextModel)" md-item-text="item.name" md-min-length="0" md-menu-class="autocomplete-custom-template"  md-floating-label="Make">
    <md-item-template>
        <span class="item-title">
        <md-icon md-svg-icon="img/icons/octicon-repo.svg"></md-icon>
        <span>{{item.name}}</span>
        </span>
    </md-item-template>
    <div ng-messages="userForm.autocomplete.$error">
        <div ng-message="required">This field is required</div>
    </div>
</md-autocomplete>


<md-autocomplete  required='' ng-disabled="isDisabled" md-no-cache="noCache" md-selected-item="selectedItemModel" md-search-text-change="searchTextChange(searchText)" md-search-text="searchText"  md-items="item in querySearchModel(searchText)" md-item-text="item.title" md-min-length="0" md-menu-class="autocomplete-custom-template"  md-floating-label="Model">
    <md-item-template>
        <span class="item-title">
        <span> {{item.name}} </span>
        </span>
    </md-item-template>
    <div ng-messages="userForm.autocomplete.$error">
        <div ng-message="required">This field is required</div>
    </div>
</md-autocomplete>




 //Angular js Controller code

  //Auto complete function for car make

  $scope.make=[{id:1,name:"Audi"},{id:2,name:"BMW"},{id:3,name:"Ferrari"}];
  $scope.selectedItem  = null;
  $scope.searchText    = null;
  $scope.querySearch   = querySearch;


   function querySearch (query) {

          var results = query ? $scope.categories.filter(createFilterFor(query)) : $scope.make,
                        deferred;
                    if (self.simulateQuery) {
                        deferred = $q.defer();
                        $timeout(function () {
                            deferred.resolve(results);
                        }, Math.random() * 1000, false);
                        return deferred.promise;
                    } else {
                        return results;
                    }

   }

   function createFilterFor(query) {
      var lowercaseQuery = angular.lowercase(query);

      return function filterFn(Make) {
        //alert(state);
        //console.log(state);
        return (Make.name.toLowerCase().indexOf(lowercaseQuery) === 0);
      };

    }


   //Auto complete function for car models
   $scope.model=[{mid:1,id:1,name:"Q3"},{mid:2,id:1,name:"Q6"},{mid:3,id:1,name:"Q2"}];
   $scope.selectedItemModel  = null;
   $scope.searchTextModel    = null;
   $scope.querySearchModel=querySearchModel;


   function querySearchModel (query) {

          var results = query ? $scope.model.filter(createFilterFor(query)) : $scope.model,
                        deferred;
                    if (self.simulateQuery) {
                        deferred = $q.defer();
                        $timeout(function () {
                            deferred.resolve(results);
                        }, Math.random() * 1000, false);
                        return deferred.promise;
                    } else {
                        return results;
                    }

   }


   function createFilterForModel(query) {
      var lowercaseQuery = angular.lowercase(query);

      return function filterFn(Model) {
       return (Model.name.toLowerCase().indexOf(lowercaseQuery) === 0);
      };

    }

最佳答案

我也遇到了类似的问题,并找到了你的问题。在第一次自动完成中,您调用 searchTextChange(searchText),但 searchText 来自第二次自动完成,而在第一个自动完成中,您将其称为 searchTextModel

<小时/>

我发现这个是因为我遇到了一个问题,即同一页面上的多个自动完成共享值。你的问题帮助我找到了解决方案。在 Bootstrap 的 typeahead 中,您可以使用 $viewValue 进行任何 typeahead,而在 mdAutocomplete 上,您可以指定绑定(bind) searchText 的模型,因此,您不能在所有自动完成上使用相同的绑定(bind),每个人都必须有一个。

关于javascript - 如何在网页中以单一表单和单一 Controller 实现 Angular js Material 的两个md-autocomplete?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50323436/

相关文章:

c++ - 如何注释 C++ 代码以便注释在 IntelliSense 中可见

javascript - 使用 Sticky-kit(jQuery 插件)重叠元素,因为导航栏会自动填充窗口

javascript - 防止虚拟键盘向上推内容

javascript - 重新使用具有不同 "view models"的 EXTjs View

javascript - 如何评估 Angular 表达式?

python - 在函数内部时自动完成/仅获取函数参数的建议

haskell - cmdArgs bash 补全

javascript - parse XML() 是否能够解析 URL 而不是 str?

angularjs - Kendo DropdownList 和 ng-model 不起作用

javascript - Datamaps 给我一个 Cannot read property 'albersUsa' of undefined