JQuery 与 angularjs ng-model 的集成

Posted

技术标签:

【中文标题】JQuery 与 angularjs ng-model 的集成【英文标题】:JQuery integration with angularjs ng-model 【发布时间】:2017-12-20 02:28:39 【问题描述】:

我想使用 jQuery 为 Angular 创建自定义下拉列表,并且在调用 jQuery .val(newValue) 后无法更新 Angular 模型。为什么我使用 jQuery?因为在某些页面中,我几乎没有包含约 500 个元素的下拉菜单,而且纯角度渲染的工作速度非常慢。这是我的指令链接功能:

(scope, element) => 
  const parent = $(element);
  const field = parent.find('input');
  const list = parent.find('ul');
  scope.options.map(item => list.append(
    $('<li>')
      .text(item.text)
      .addClass(item.disabled && 'disabled')
      .data(
        value: item.value,
        disabled: item.disabled
      )
      .click(function () 
        const data = $(this).data();
        if (!data.disabled) 
          field
            .val(data.value)
            .trigger('change'); 
          // also tried => scope.model = data.value;
        
      )
  ));

这是模板:

<div class="dropdown">
  <input
    type="text"
    readonly
    placeholder="Select item"
    ng-model="model"
    ng-change="change">
  <ul></ul>
</div>

在***上,我发现应该调用.trigger('change'),但改变模型没有帮助。如何更新角度模型?

【问题讨论】:

谁想要使用包含 500 个值的下拉菜单? 【参考方案1】:

我找到答案了

scope.$parent.$apply(() => 
  scope.model = data.value;
);

代替

field
  .val(data.value)
  .trigger('change'); 

【讨论】:

以上是关于JQuery 与 angularjs ng-model 的集成的主要内容,如果未能解决你的问题,请参考以下文章

我们应该将 jQuery 与 AngularJS 一起使用吗? [关闭]

JQuery 菜单编辑器与 AngularJS 1.5 不兼容

两强相争,鹿死谁手 — JQuery中的Ajax与AngularJS中的$http

AngularJS和jquery,有啥区别?

JQuery 与 angularjs ng-model 的集成

ASP.NET MVC中jQuery与angularjs混合应用传参并绑定数据