Angularjs 是否使用工厂解析程序返回的值更新URL?

Angularjs 是否使用工厂解析程序返回的值更新URL?,angularjs,angular-ui-router,Angularjs,Angular Ui Router,我使用Angular的UI路由器,为特定视图和控制器设置了一个解析器,如下所示。如何使用从我的urlHasherFactory工厂返回的值更新URL?我希望此工厂生成的值填充到我的URL栏中,例如:http://example.com/user/57。在这种情况下,57是我想要填充的动态用户值,它将根据工厂返回的内容而变化 var MYAPP = angular.module('myApp', ['ui.router']) .config(['$stateProvider', '$urlRou

我使用Angular的UI路由器,为特定视图和控制器设置了一个解析器,如下所示。如何使用从我的
urlHasherFactory
工厂返回的值更新URL?我希望此工厂生成的值填充到我的URL栏中,例如:
http://example.com/user/57
。在这种情况下,
57
是我想要填充的动态用户值,它将根据工厂返回的内容而变化

var MYAPP = angular.module('myApp', ['ui.router'])

.config(['$stateProvider', '$urlRouterProvider', 

  function($stateProvider, $urlRouterProvider) {

    // For any unmatched url redirect to /
    $urlRouterProvider.otherwise("/");

    // States
    $stateProvider

      // Start
      .state('start', {
        url: "/",
        templateUrl: "views/_start.html",
        controller: "StartCtrl"
      })

      // Chat
      .state('chat', {
        url: "/user/:userId",
        templateUrl: "views/_user.html",
        controller: "UserCtrl",
        resolve: {
          user: function(urlHasherFactory) {
            return urlHasherFactory.getUrlHash();
          }
        }
      });

  }

])

.factory('urlHasherFactory', ['$http', function ($http) {
    var hash = {
      getUrlHash: function() {
        var promise = $http({ method: 'GET', url: '/userid' })
          .success(function(data, status, headers, config) {
            return data;
          }
        );
        return promise;
      }
    };
    return hash; 
}])

.controller('StartCtrl', ['$scope', function($scope) {

  // How do I update URL structure in here?

}])

.controller('UserCtrl', ['$scope', 'user', function($scope, user) {

  // How do I update URL structure in here with user's id
  // so it looks something like this: http://example.com/user/57

  // This is I how I access urlHasherFactory
  var urlHash = user.data.userid;

}]);

一种方法,如果我很了解您的场景,可以是1)在没有参数userId的情况下进入
chat
状态2)检查userId param,如果缺少,根据传递的用户实例重定向到chat/xxx。系统(简化,无需任何检查以避免环形调用)及其主要部件:

“开始”状态包含聊天状态的url:
“ui sref=“chat()”
,不带参数

// States
$stateProvider

  // Start 
  .state('start', {
    url: "/",
    template: '<div>start <a ui-sref="chat()">chat</a> </div>',
  })
工厂
未更改(只是不异步)

聊天室/用户
控制器
重定向,以防
用户ID
丢失

.controller('UserCtrl', 
  [       '$scope','$state','$stateParams','user',
  function($scope , $state , $stateParams , user) {

    if($stateParams.userId === null){

      var urlHash = user.data.userId;
      $state.go("chat", {userId : urlHash})
    }
    $scope.userId = $stateParams.userId;
}])
注意:我们应该引入一些检查以避免出现圆圈,例如,
user.data.userId
确实会为我们提供一些userId

请看一看
.factory('urlHasherFactory', ['$http', function ($http) {
    var hash = {
      getUrlHash: function() {
        return { data : { userId : 57 } };
      },
    };
    return hash; 
}])
.controller('UserCtrl', 
  [       '$scope','$state','$stateParams','user',
  function($scope , $state , $stateParams , user) {

    if($stateParams.userId === null){

      var urlHash = user.data.userId;
      $state.go("chat", {userId : urlHash})
    }
    $scope.userId = $stateParams.userId;
}])