2015-09-04 43 views
0

我有一个简单的CRUD,它与Angularjs放在一起。从产品列表显示中,我将用户传递给“新建”窗体的新视图模板。

表单处理正常并更新数据库。然后,我使用“$ 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'); 
} 

上述职位的新产品,然后重定向到列表页面(/ ACN)

我的假设是,列表页会重新处理或观看更改$范围,但认为不更新。

+0

$ scope.acn和$ scope.acns之间的区别是什么? – maddygoround

+0

$ scope.acns代表所有产品。 $ scope.acn是一个单一的产品。在第一个代码块中,我调用了acns列表。在第二个代码块中,我正在处理一个表单以“创建新的”acn。然后我回到/ acn视图,它列出了所有的acns。 – crowsfeet

+0

它可能会发生,因为它的异步调用我们的$范围可能不会更新,请尝试使用$ scope。$ apply()在$ scope.acns = data之后; ,只是为了检查天气它做伎俩 – maddygoround

回答

0

问题是最有可能在这里:

$scope.createAcn = function() { 
    $scope.acn.isActive = true; 
    acnFactory.create($scope.acn); 
    $location.path('/acn'); 
} 

创造一个产品肯定是由在发送HTTP请求到服务器。这是异步的。这意味着acnFactory.create()在请求发送后立即返回发送。未收到回复后。

因此,此代码发送创建产品的请求并立即进入列出产品的页面。因此发送获取产品列表的GET请求几乎与用于创建新产品的GET请求几乎同时发送。这两个请求由服务器同时处理,并且返回的列表包含没有新产品的列表,这是在单独的事务中创建的。

在进入产品列表之前,您需要等待回复,并确保其成功。假设服务返回承诺,因为它应该这样做:

$scope.createAcn = function() { 
    $scope.acn.isActive = true; 
    acnFactory.create($scope.acn).then(function() { 
     $location.path('/acn'); 
    }); 
}; 
+0

谢谢JB。真的很感激它。我实际上已经想通了,并使用了下面的代码:$ scope.createAcn = function(){ $ scope.acn.isActive = true; (函数(){ $ scope.acns = acnFactory.query()) 。$ promise.then(function(){ $ location.path('/acn'); }); }); } – crowsfeet

+0

JB,不用说,你的代码比我想出来的要好得多,它帮助我减少了一些问题。谢谢!!! – crowsfeet

相关问题