Angular UI路由器在状态更改时重新加载数据

时间:2015-11-30 03:36:35

标签: angularjs angular-ui-router

我正在使用Angular ui路由器(https://github.com/angular-ui/ui-router)并遇到意外行为。

我设置了recordViewrecordEdit个状态,并使用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状态吗?
  • 有没有办法简单地强制重新加载页面并忽略缓存?基本上模仿路线第一次被击中。

感谢。

2 个答案:

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