Angular UI路由器在状态改变时重新加载数据
我正在使用Angular ui路由器(https://github.com/angular-ui/ui-router)并遇到意想不到的行为。
我有一个recordView
和recordEdit
状态设置并使用sref / $ state.transitionTo在它们之间切换。
当处于recordEdit
状态时,更新通过ajax完成,并且在成功时,我将编程状态变为recordView
。 问题是, recordView
状态不显示更新数据,只有在刷新页面时才显示。
我尝试使用重新加载选项,但没有成功。
App.saveRecord($scope.formData).then(function (response) {
$state.transitionTo('recordView', $stateParams, {
reload: true
});
}
我也尝试使用$state.go(...)
但获得相同的结果。
我也尝试在state属性上使用cache = false
,但没有成功。
.state('recordView', {
url: '/folder/:hash/:recordId',
resolve: {},
cache: false,
templateUrl: function (urlattr) {
//return the url
}
})
然后我试着明确地将window.location
改为view url,但它仍然会显示以前的数据。 唯一的一次实际工作是如果我打电话给location.reload();
在改变状态之后,但这对用户体验不利。
有谁知道为什么会发生这种情况? 我见过的所有帖子都提到将reload设置为true或将缓存设置为false。
更新每个评论我明白,问题是我正在使用ng-init和服务器端渲染来将数据从php注入角度,当重新加载视图时,此数据不会重新加载。 我的问题是:
recordEdit
状态“注入”到recordView
状态中吗? 谢谢。
这是一个想法。 在你的路由文件中定义一个父抽象状态并用数据初始化它
.state('parent.state'
{
abstract: true,
data:{
init://server rendered data here
}
}
)
.state('child.state.view',
{
// your route definition here
}
)
.state('child.state.edit',
{
// your route definition here
}
)
然后在你的控制器中注入$ state服务在view controller中使用
//assuming the data variable holds the needed data. change that to what ever
$scope.data = $state.current.data.init; //if using $scope
this.state = $state.current.data.init; //if controller As syntax
由于数据将在控制器上初始化,因此删除ng-init语句。 然后在编辑视图中的Update函数中确保使用新数据更新$state.current.data.init
。 这样下一次你去那里时,控制器将从$ state对象中选择数据并获取更新的数据。
回答:
$templateCache.remove('http://urlthemplate');
链接地址: http://www.djcxy.com/p/77947.html
上一篇: Angular UI Router reload data on state change
下一篇: AngularJS ui router passing data between states without URL