angular.js将jquery自动完成对象绑定到ng模型,将值输入到对象的属性

angular.js binding jquery autocomplete object to ng-model, input value to property of object

本文关键字:对象 模型 输入 属性 ng js 绑定 angular jquery      更新时间:2023-12-03

我在我的应用程序angular.js和jquery autocomplete中使用。因此,我想创建一个angular指令,它包装jquery autocomplete:

'use strict'
angular.module('nsi')
  .directive('autoComplete', function () {
    return {
      restrict: 'A',
      scope: {
        httpService: "=",
        renderItem: '=',
        ngModel: '=',
        minLength: '=',
        onSelect: '='
      },
      link: function (scope, elem) {
        elem.autocomplete({
          source: function (request, response) {
            scope.httpService(request.term).then(function (data) {
              response(
                $.map(data.items, function (item) {
                    return scope.renderItem(item);
                  }
                )
              );
            });
          },
          minLength: scope.minLength,
          select: function (event, ui) {
            if (scope.onSelect) {
              scope.onSelect(ui.item.item);
            }
            scope.$apply(function () {
              scope.ngModel = ui.item.item;
            });
          }
        })
        ;
      }
    };
  });

在我的控制器中,我初始化它的必要参数:

$scope.supplierRender = function(item){
    return {
      label: item.supplierName,
      value: item.supplierName,
      item: item
    }
  };
  $scope.httpSupplierService = function(suggest){
    return SupplierService.getSuppliers('%' + suggest + '%');
  };
  $scope.supplierSelect = function(val) {
    $scope.employee.supplier.id = val.id;
  };

在我的html视图中,我启动我的指令:

 <input              type="text"
                     auto-complete
                     min-length="3"
                     http-service="httpSupplierService"
                     render-item="supplierRender"
                     on-select="supplierSelect"
                     ng-model="employee.supplier"
                     class="form-control"
                     value="employee.supplier.supplierName" />

问题是,当我在编辑窗口中打开我的员工时,在自动完成输入中,我会看到[object Object]。因此,问题是:"如何将ngModel绑定到employee.Supplier",以及输入到对象(employee.supplier.supplierName)特定字段的值

尝试设置ng-model:

ng-model="employee.supplier.supplierName"

通常<input>从指令ng-model中获取值,因此您不需要提供value=..

这是一个测试:Fiddle

当未为input 定义ng-model时,value=..属性有效