使用$ location.path传递到新视图后,$ scope不会更新

时间:2015-09-04 17:31:01

标签: angularjs angularjs-scope angularjs-routing

我有一个与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的更改,但视图不会更新。

1 个答案:

答案 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');
    });
};