AngularJS:使用jQuery更改时,ng-model绑定不会更新

Gre*_*reg 98 javascript data-binding jquery angularjs angular-ngmodel

这是我的HTML:

<input id="selectedDueDate" type="text" ng-model="selectedDate" />
Run Code Online (Sandbox Code Playgroud)

当我在框中输入时,模型通过双向绑定机制进行更新.甜.

但是,当我通过JQuery这样做...

$('#selectedDueDate').val(dateText);
Run Code Online (Sandbox Code Playgroud)

它不会更新模型.为什么?

Ren*_*des 133

Angular不知道这种变化.为此,您应该在以下内容中调用$scope.$digest()或进行更改$scope.$apply():

$scope.$apply(function() { 
   // every changes goes here
   $('#selectedDueDate').val(dateText); 
});
Run Code Online (Sandbox Code Playgroud)

请参阅此内容以更好地了解脏检查

更新:是一个例子

  • 请参阅此http://fiddle.jshell.net/agvTz/38/ 您应该调用`function` $scope.$apply 传递函数作为参数。当您对 $scope 进行更改时,应该调用 $apply,因此,在 onSelect 内部。啊,我希望你将 DOM 操作放在控制器中只是为了举例,在真实的应用程序中这是错误的;) (2认同)
  • 是的,这里有一个例子http://fiddle.jshell.net/agvTz/39/该指令可以在输入中使用简单的`datepicker ="scopeKeyThatYouWant"`多次使用 (2认同)

Jan*_*uri 27

只是用;

$('#selectedDueDate').val(dateText).trigger('input');
Run Code Online (Sandbox Code Playgroud)

  • 经过几个小时的搜索,这是一个有效的!谢谢! (2认同)

Ben*_*ros 16

我发现如果你不直接将变量放在范围内,它会更可靠地更新.

尝试使用一些"dateObj.selectedDate"并在控制器中将selectedDate添加到dateObj对象,如下所示:

$scope.dateObj = {selectedDate: new Date()}
Run Code Online (Sandbox Code Playgroud)

这对我有用.

  • 这对我也有用.我浪费了2个多小时试图弄清楚为什么双向绑定不起作用.它在页面上工作正常,但控制器中的范围没有更新.然后我出于绝望尝试你的方法(因为这对我来说没有意义,这应该是真的)而且该死的,它有效!谢谢! (4认同)
  • 同样在这里 - 任何angularJs大师可以解释为什么这有效吗?就像视图有自己的嵌套范围一样,有时你只是更新视图范围,而不是更新控制器范围 (3认同)

小智 5

尝试这个

var selectedDueDateField = document.getElementById("selectedDueDate");
var element = angular.element(selectedDueDateField);
element.val('new value here');
element.triggerHandler('input');
Run Code Online (Sandbox Code Playgroud)