AngularJS 手动更新输入不会触发模型的变化

标签 angularjs

当我从纯 JavaScript 更改输入元素的值时, Angular 模型不会更新。有没有办法通过在更改后手动触发某些事件来以某种方式触发此更新?

<body ng-controller="MainCtrl">
  <script>
    function changeValue() {
      var e = document.getElementById("field");
      e.value = "updated value";
    }
  </script>

  field: <input type="text" id="field" ng-model="field">{{field}}
  <br>
  <button onclick="changeValue()">Change the value</button>

</body>

完整示例可在 plunkr 上找到.单击按钮后,我希望 {{field}}以某种方式更新。有没有办法做到这一点?

最佳答案

您不应该这样做(除非它用于 测试 ,但即便如此,请考虑 protractor )。以这种方式与 Angular 交互是个坏主意。但如果你必须这样做,这就是你的做法。

function changeValue() {
  var e = document.getElementById("field");
  e.value = "updated value";
  var $e = angular.element(e);
  $e.triggerHandler('input');
}

PLNKR

一种不同的中间方式是
function changeValue() {
  var e = document.getElementById("field");
  var scope = angular.element(e).scope();
  scope.field = "updated value";
  scope.$digest();
}

PLNKR

正确的方法是使用 Angular Controller
  $scope.changeValue = function(){
    $scope.field = "updated value";
  }; 

PLNKR

关于AngularJS 手动更新输入不会触发模型的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22942509/

相关文章:

javascript - 如何将 Angular 数组数据发送到 Controller ?

JavaScript:使用动态键值解析 JSON

javascript - AngularJS Controller : The Right Way

javascript - angular js嵌套 Controller 列表/项目

javascript - Ng-Repeat 中的 Angular 评估函数

javascript - isteven-multi-select 输出模型不适用于模板

javascript - Angular.js 如何在登录 Controller 中设置常量

javascript - 从复选框循环遍历 json 对象

javascript - AngularJs:如何解码 HTML 中的 HTML 实体?

angularjs - 使用 UIGrid 和 Typescript DefinelyTyped