Angularjs Ng模型不更新视图

Angularjs Ng模型不更新视图,angularjs,angularjs-scope,angular-ui-bootstrap,Angularjs,Angularjs Scope,Angular Ui Bootstrap,我到处都找遍了,似乎找不到解决问题的办法。 我正在尝试制作一个表单来填充,以便在网站上的项目上创建新的任务对象,比如scrum积压工作或Angular和Angular ui中的某些东西 我使用Angular UI来实现提前键入功能,以便在向任务添加团队成员时,在项目弹出窗口中显示可用的成员。我见过有类似问题的人,但似乎没有什么能帮我解决。下面是HTML和控制器。很抱歉标记太长,但我怀疑它与嵌套控制器和混合作用域有关,所以我将包括所有相关内容 <div ng-controller="Subm

我到处都找遍了,似乎找不到解决问题的办法。 我正在尝试制作一个表单来填充,以便在网站上的项目上创建新的任务对象,比如scrum积压工作或Angular和Angular ui中的某些东西

我使用Angular UI来实现提前键入功能,以便在向任务添加团队成员时,在项目弹出窗口中显示可用的成员。我见过有类似问题的人,但似乎没有什么能帮我解决。下面是HTML和控制器。很抱歉标记太长,但我怀疑它与嵌套控制器和混合作用域有关,所以我将包括所有相关内容

<div ng-controller="SubmitCreateTaskController">
<div class="modal fade" id="taskModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">
                    <span aria-hidden="true">&times;</span>
                    <span class="sr-only">Close</span>
                </button>
                <h4 class="modal-title" id="myModalLabel">New Task</h4>
            </div>
            <div class="modal-body">           
                <form role="form" method="post" name="create-task">
                    <div class="form-group">
                        <label for="taskname">Task Name</label>
                        <input type="text" class="form-control" id="taskname" ng-model="taskForm.taskName" placeholder="Task Name">
                    </div>

                    <div class="form-group">
                        <label for="taskdesc">Description</label>
                        <textarea class="form-control" id="taskdesc" size="3" ng-model="taskForm.taskDescription" placeholder="Enter a short description here..." rows="2"></textarea>
                    </div>

                    <div class="form-group">
                        <label for="assigneddate">Assigned Date</label>
                        <input type="text" class="form-control" id="assigneddate" ng-model="taskForm.assignedDate">
                    </div>
最后一位是“TypeAheadController”中的重要部分。我正在尝试将弹出的团队成员添加到一个文本区域,该文本区域将稍后发送到DB。这就是为什么我将实际的typeahead输入框绑定到“contrib.select”和“display/post”框绑定到“contrib.entered”,这样在添加一个成员后可以继续搜索,搜索框被清除,所选成员被添加到下面的框中,新的搜索可以开始。在标记中,我调用了typeahead on select回调中的最后一个(onSelect)函数。这样,我可以清除输入框,并且可以轻松添加其他成员,而无需手动删除。在此函数中,输入的成员应附加到绑定到“显示/发布”框下方的数组中。这种情况会发生,因为控制台日志显示了良好的值,所以搜索/输入字段会被清除,因此函数也会被调用

但是,视图不会使用绑定到显示框的更新数组进行更新。我什么都试过了。我在谷歌上搜索了一下,发现这里需要使用点符号,因为角度符号不能用原语更新,但这也没有帮助

一切都很好,逻辑很好,打印出来的值也很好,弹出窗口按预期工作和清除,但它下面该死的文本区域没有更新

有什么建议吗?我已经坚持了差不多一天了,我真的很沮丧。如果有任何帮助,我会非常感激的!
提前谢谢大家

text区域不使用ng值,因为它们的值包含在标记中。移除ng模型并将值放在标记之间

  <textarea class="form-control" disabled="disabled" id="users" rows="1">{{contrib.entered}}</textarea>
{{contrib.entered}

Textarea不要使用value属性,因为contrib导致代码无法工作。输入的值不在标记之间,但因为无法将textarea绑定到数组(它需要绑定到字符串)

看看这个,如果您在html中这样做:

<textarea class="form-control" disabled="disabled" id="users" rows="1" ng-model="contrib.enteredString"></textarea>

然后文本区域将更新

尝试隔离您的问题。也许你想在Plnkr中复制它。非常感谢!事实上,我已经尝试过把标签改成一个,因为我对它有怀疑,但我猜这样也不行?无论如何,这解决了我的问题。我不是疯了,我只是累了,总是很高兴知道:)再次谢谢你善良的陌生人!一个输入可以正常工作,但是你不能有多行,我猜这就是你想要的。我实现了类似的东西,但在条目下面的DIV中使用了ng repeat,因此添加的项显示为列表,而不是逗号分隔的列表。好主意,既然主逻辑工作了,我可能会考虑其他可能性,因为显示带尖括号n all的数组的textarea是uuugly。如果您的textarea位于表单中,那么您可以使用ng model=“FORM.somevalue”,这将在用户键入值时正确绑定该值。我不知道为什么这个有-1。如上所述,这是绝对正确的。我有一个plnkr显示它。如果将textarea放在表单中,则其工作方式不同,但问题并非如此
.controller('SubmitCreateTaskController', ['$scope', '$http', function($scope, $http) {
$scope.taskForm = {};
$scope.taskForm.taskName = '';
$scope.taskForm.taskDescription = '';
$scope.taskForm.assignedDate = new Date();
$scope.taskForm.contributors = [];
$scope.taskForm.comment = '';

$scope.taskForm.submit = function(item, event) {
    var formData = {name: $scope.taskForm.taskName,
                    description: $scope.taskForm.taskDescription,
                    status: 'open',
                    assigned: $scope.taskForm.assignedDate,
                    completed: null,
                    contributors: $scope.taskForm.contributors,
                    comments: [{body: $scope.taskForm.comment,
                                user: 'RACHE User',
                                date: new Date()
                                }]
                    };

    var postURL = '../create_task/' + $scope.stream_name;

    $http.post(postURL, formData)
    .success(function(){
        taskForm = {}; // empty the form of previous input values
        alert('New Task Created for ' + $scope.stream_name);
    })
    .error(function(res) {
        alert(res.data);
    });
};
}])
.controller('TypeAheadController', ['$scope', '$http', function($scope, $http) {
$scope.contrib = {};
$scope.contrib.selected = '';
$scope.contrib.stream_members = undefined;
$scope.contrib.entered = [];

$http.get('/stream_members/' + $scope.stream_name)
.then(function(res) {
    $scope.contrib.stream_members = res.data.stream_members;
});

$scope.contrib.onSelect = function($item) {

    $scope.contrib.selected = '';

    $scope.contrib.entered.push($item);
    console.log($scope.contrib.entered);
};
  <textarea class="form-control" disabled="disabled" id="users" rows="1">{{contrib.entered}}</textarea>
<textarea class="form-control" disabled="disabled" id="users" rows="1" ng-model="contrib.enteredString"></textarea>
 $scope.contrib.enteredString = $scope.contrib.entered.toString();