我是angular-js的新手,正在构建一个简单的待办应用程序。我正在创建一个任务,并使用ng-repeat在html表中显示创建的任务。但是问题在于发布数据之后,$ scope.tasks变量在控制器端而不是视图中更新。该视图仅在刷新网页后更新,并且该任务已添加到html表中。创建任务后如何更新视图。提前致谢。这是我的代码:
在我的控制器中:
var app = angular.module('MyApp', ['ngMaterial', 'ngMessages']);
app.controller('DemoCtrl', function($scope,$mdSidenav,$mdDialog,$interval,$http,$mdToast) {
$scope.tasks = [];
_refreshTaskData(); //initial refresh
$scope.submitForm = function() {
var description = "";
var taskId = "";
$scope.formData = {
taskId: $scope.taskId,
description: $scope.description,
};
$http({
method: "POST",
url: 'savetask',
data: angular.toJson($scope.formData),
headers : {
'Content-Type': 'application/json',
}
}).then(_success, _error);
};
function _refreshTaskData() {
$http({
method : 'GET',
url : 'getTask',
}).then(function(res) { // success
$scope.tasks = res.data;
}, function(res) { // error
console.log("Error: " + res.status + " : " + res.data);
});
}
function _success(res) {
$mdDialog.hide();
console.log('in success function');
_refreshTaskData(); ;
}
function _error(res) {
//error handling
}
});
我认为:
<table>
<tr ng-repeat=" t in tasks">
<td>{{t.id}}</td>
<td>{{t.description}}</td>
</tr>
</table>
答案 0 :(得分:0)
您必须了解这些JS框架是异步的。现在发生的事情是,如果您执行一个API调用并进行另一个基于其第一个结果的API调用,则控制台不会等待一个API的结果,而是直接向前移动。因此,您的情况有时/很多次发生,在为POST调用提供服务之前,控制器无法及时使用GET获取新数据,因此无法更新视图。您可能要做的就是仅在提供POST时强制GET
$http({
method: "POST",
url: 'savetask',
data: angular.toJson($scope.formData),
headers : {
'Content-Type': 'application/json',
}
}).then(function(res){
$http({
method : 'GET',
url : 'getTask',
}).then(function(res) { // success
$scope.tasks = res.data;
}, function(err) { // error
console.log("Error: " + err.status + " : " + err.data);
});
});
最好是从后端发送成功消息并在GET调用之前进行检查
答案 1 :(得分:-2)
我认为您在任何时候都不会调用_refreshEmployeeData。如果在JS中添加它而不是_refreshTaskData,那么您将能够在视图中查看结果。
也请使用ng-init调用控制器中的_refreshEmployeeData。那将是初始化字段的最佳方法。