【问题标题】:angular.js binding jquery autocomplete object to ng-model, input value to property of objectangular.js 将 jquery 自动完成对象绑定到 ng-model,输入值到对象的属性
【发布时间】:2013-11-28 18:44:23
【问题描述】:

我在我的应用程序中使用 angular.js 和 jquery 自动完成功能。 所以,我想创建一个角度指令,它包装 jquery 自动完成:

'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

【问题讨论】:

    标签: javascript jquery angularjs autocomplete


    【解决方案1】:

    尝试设置ng-model:

    ng-model="employee.supplier.supplierName"
    

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

    这是一个测试:Fiddle

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

    【讨论】:

    • 我无法将 ng-model 设置为 employee.supplier.supplierName。因为在我的控制器中,我调用服务并使用供应商对象保存我的员工
    • 好吧,它的设计问题如此
    • 据我了解,我不能将 ng-model 与对象一起使用,只能与原语一起使用。
    • @YuriyMayorov 根本没有,&lt;input&gt; 是的,但对于其他东西,如&lt;div&gt;&lt;select&gt;,你可以使用不代表价值的对象
    猜你喜欢
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 2016-04-02
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多