我有一个与Angularjs放在一起的简单CRUD。从产品列表显示中,我将用户传递给“创建新”表单的新视图模板。
表单处理正常并更新数据库。然后我使用“$ location.path(url)”将用户传回列表显示。
出于某种原因,当列表页面显示时,更改不会出现在$ scope中,您必须刷新页面才能看到更改。
示例代码:
$scope.acns = acnFactory.query()
.$promise.then(function (data) {
$scope.acns = data;
});
以上显示项目列表。
$scope.createAcn = function () {
$scope.acn.isActive = true;
acnFactory.create($scope.acn);
$location.path('/acn');
}
以上POST新产品然后重定向到列表页面(/ acn)
我的假设是列表页面将重新处理或观察$ scope的更改,但视图不会更新。
答案 0 :(得分:0)
问题很可能在这里:
$scope.createAcn = function () {
$scope.acn.isActive = true;
acnFactory.create($scope.acn);
$location.path('/acn');
}
创建产品肯定包括向服务器发送HTTP请求。这是异步的。这意味着acnFactory.create()
会在发送请求后立即返回。不是在收到回复后。
因此,此代码发送创建产品的请求,并立即转到列出产品的页面。因此,发送以获取产品列表的GET请求几乎在与用于创建新产品的同一时刻发送。这两个请求由服务器同时处理,返回的列表包含没有新产品的列表,该列表是在单独的事务中创建的。
在进入产品列表之前,您需要等待回复,并确保其成功。假设服务返回一个promise,就像它应该做的那样:
$scope.createAcn = function () {
$scope.acn.isActive = true;
acnFactory.create($scope.acn).then(function() {
$location.path('/acn');
});
};