首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过DOM操作进行AngularJS数据绑定

通过DOM操作进行AngularJS数据绑定
EN

Stack Overflow用户
提问于 2013-03-27 18:50:07
回答 4查看 5.3K关注 0票数 1

当我直接输入一些字符串输入元素时,AngularJS的双向数据绑定工作得很好。但是当我通过javascript代码改变input元素的值时,双向绑定不起作用。有什么好方法可以做到这一点吗?

html代码:

代码语言:javascript
复制
<div ng-app ng-controller="Ctrl">
    <input id="inputElem" ng-model="modelName" type="text"/>
    <span>{{modelName}}</span>
</div>

javascript代码:

代码语言:javascript
复制
function Ctrl($scope) {
    $scope.modelName = "";
}

function foo() {
    // THIS DOES NOT TRIGGER ANGULAR DATA-BINDING!!!!
    $("#inputElem").val("THIS IS DOM MANIPULATION");
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-27 19:23:41

您可以通过触发更改事件来实现这一点

代码语言:javascript
复制
$("#inputElem").val("THIS IS DOM MANIPULATION").trigger('change');

演示:Plunker

修改绑定值的另一个技巧

代码语言:javascript
复制
var scope = angular.element('#inputElem').scope();
scope.$apply(function(){
  scope.modelName = "THIS IS DOM MANIPULATION";
});

演示:Plunker

票数 5
EN

Stack Overflow用户

发布于 2013-03-27 19:36:39

你真的应该为此改变模型,而不是反过来:

http://jsfiddle.net/b9chris/EBWtR/

代码语言:javascript
复制
<div ng-app>
<div ng-controller=Ctrl>
<div><input ng-model=thing /></div>
<div ng-bind=thing></div>
</div>
</div>

function Ctrl($scope) {
    $scope.thing = 'Hi';

    // Later, for some reason you want to change the
    // input in code so you update the model
    setTimeout(function() {
        $scope.thing = 'Bye';
        $scope.$apply();
    }, 2000);
}
票数 1
EN

Stack Overflow用户

发布于 2013-03-27 19:03:10

当您在angular之外更改某些内容时,您必须在$scope上调用$apply才能应用您的更改。

从文档中:

$apply()用于从angular框架外部执行angular中的表达式。(例如,来自浏览器DOM事件、setTimeout、XHR或第三方库)。

http://docs.angularjs.org/api/ng.$rootScope.Scope

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15657046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档