我正在使用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(...)
,但得到的结果相同。
我也尝试在州财产上使用cache = false
,但没有成功。
.state('recordView', {
url: '/folder/:hash/:recordId',
resolve: {},
cache: false,
templateUrl: function (urlattr) {
//return the url
}
})
然后,我尝试将window.location
明确更改为视图网址,但仍会显示以前的数据。
它实际工作的唯一时间是我在更改状态后调用location.reload();
但这对用户体验不利。
有谁知道为什么会这样?我见过的所有帖子都提到将重新加载设置为true或将缓存设置为false。
更新 根据我的评论,我理解问题是我使用ng-init和服务器端渲染将数据从php注入到角度,并且在重新加载视图时,此数据不会重新加载。 我的问题是:
recordEdit
状态的编辑数据“注入”到recordView
状态吗?感谢。
答案 0 :(得分:0)
这是一个想法。 在您的路径文件中定义父抽象状态并使用数据
初始化该状态.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服务在yout view controller use
//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句子,因为数据将在控制器上初始化。然后在编辑视图中的更新功能上,确保使用新数据更新$state.current.data.init
。这样,下次你去那里时,控制器将从$ state对象中选择数据并获得更新的数据。
答案 1 :(得分:0)
答案:
$templateCache.remove('http://urlthemplate');