在ng-click上更新AngularJS模型,DOM没有响应

时间:2014-06-24 20:39:56

标签: javascript html angularjs data-binding angularjs-model

我有一个输入框和一个textarea,它们保存在一个模式窗口中,按一下按钮就打开了。具有不同目的的第二模态正在使用相同的输入框和文本区域。每个模态都在不同的控制器下。因此,当我单击第一个控制器的按钮时,我希望某些更改应用于模态,而不是当我单击其他控制器的按钮时。

但是,由于这些控制器共享这些输入和textarea字段,因此有时来自彼此的信息由于其中的ng-model而相互传递。其他时候,如果我打开一个模态窗口,输入输入,关闭它,然后重新打开同一个窗口,内容仍然保留在输入字段中。

这都是因为我无法弄清楚如何从我的控制器中更新这些输入/ textarea字段的内容。我不确定我做错了什么。我的模型没有更新DOM - 帮助?

ControllerA,新帖子

$scope.anonOrName = "anonymous"; //value when user posts anonymously
$scope.systemUserName="name from system here"; //value when user posts not-anon

//New title defined by the user for the post.
$scope.title="";

//post content the user fills in
$scope.postContent = "";

/*
* Operates the New Post modal window, calling functions from the modalManager
*factory
*/
$scope.newIdeaClick = function() {
    $scope.title=""; //make sure title input is blank, doesn't work
    $scope.postContent=""; //make sure the textbox is blank, doesn't work
    document.getElementById('title').disabled = false; //allows user to type a new title, sometimes doesn't work
    document.getElementById('anonymous').disabled = true; //user must post anonymously
    modalManager.open('newPost'); //open the modal window
};

ControllerB,新评论

$scope.anonOrName = "anonymous";
$scope.systemUserName="name from system here";

//Title of the post the user is commenting on. The user cannot change this.
$scope.title="";

// Content of the textarea, the new comment written by the user.
$scope.postContent = "";


/*
* Operates the New comment modal window, calling functions from the modalManager factory
*/
$scope.newCommentClick = function() {
    $scope.title="(some title will go here"; //sets the title, cannot be changed, doesn't work
    $scope.postContent=""; //make sure the textbox is blank, doesn't work
    document.getElementById('anonymous').disabled = false; //user can select anon or not
    document.getElementById('title').disabled = true; //user may not choose new title
    modalManager.open('newComment');
};

index.html 有两个以下代码调用,一个在ControllerA下,另一个在ControllerB下:

<modal>
    <input ng-model="title" class="titleInputBox" id="title" />
    <div class="commentPostName">
        <div class="nameBlank">
            {{anonOrName}}
        </div>
        <label>
            Anonymous: 
            <input type="checkbox" ng-model="anonOrName" class="anonCheckBox" ng-true-value="anonymous" ng-false-value="{{systemUserName}}" id="anonymous" />
        </label>
    </div>
    <textarea id="postBodyTextArea" ng-model="postContent">
    </textarea>
</modal>

titlepostContent是我的两个模型我每次点击相应的帖子或评论按钮时都会尝试设置空白,调用每个控制器中定义的点击功能。但他们不会更新DOM中的空白。

非常感谢任何帮助!

更新:通过调试语句,我已经能够确定值本身已被重置为空白,就像我编写的代码一样,但更改根本不尊重DOM。我也尝试使用$ scope。$ watch对这些模型做同样的事情,但没有运气。

更新: 选定的答案有效,但我的代码中有各种其他错误,保持正确的答案,就好像它有任何影响一样。但它现在正在工作!只是没有上面的代码。

1 个答案:

答案 0 :(得分:2)

问题可能是由范围继承引起的。您应该将字符串值作为属性存储在对象中,而不是$scope.title$scope.postContent

$scope.models = {
    title : "",
    postContent: ""
};
标记中的

<input ng-model="models.title" class="titleInputBox" id="title" />
<textarea id="postBodyTextArea" ng-model="models.postContent">

模态的直接控制器可能不是您编写的控制器,而是控制器的子控制器。有关详细信息,请阅读Understanding Scopes,您可能会从中受益,因为这是一项常见任务。