2014-05-19 46 views
0

我正在使用Angular的UI路由器,併爲特定的視圖和控制器設置瞭解析器,它看起來像這樣,如下所示。我將如何使用從我的urlHasherFactory工廠返回的值更新URL?我希望該工廠生成的值填充到我的URL欄中,例如:http://example.com/user/57。在這種情況下,57是我想要填充的動態用戶值,並且取決於工廠返回的內容。從工廠解析器返回值更新URL?

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

看一下http://stackoverflow.com/questions/11534710/angularjs-how-to-use-routeparams-in-generating-the-templateurl – MichaelLo

回答

0

的一種方式,如果我理解您的方案很好,可能是1)進入chat狀態,而不PARAM用戶id 2)檢查用戶id PARAM,若沒有,重定向基礎上,通過用戶實例聊天/ XXX。該plunker(簡化,沒有任何檢查,以避免cyrcle呼叫)​​及其主要部件:

「開始」狀態包含URL到聊天狀態:"ui-sref="chat()"沒有PARAM

// States 
$stateProvider 

    // Start 
    .state('start', { 
    url: "/", 
    template: '<div>start <a ui-sref="chat()">chat</a> </div>', 
    }) 

不變chat狀態(調整僅plunker)

// Chat 
    .state('chat', { 
    url: "/user/:userId", 
    template: "<div>chat for user: {{userId}}</div>", 
    controller: "UserCtrl", 
    resolve: { 
     user: function(urlHasherFactory) { 
     return urlHasherFactory.getUrlHash(); 
     } 
    } 
    }) 

factory不變(只是沒有異步)

.factory('urlHasherFactory', ['$http', function ($http) { 
    var hash = { 
     getUrlHash: function() { 
     return { data : { userId : 57 } }; 
     }, 
    }; 
    return hash; 
}]) 

聊天/用戶controller重定向的情況下,userId缺少

.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; 
}]) 

注:我們應該引入一些檢查,以避免cyrcles,例如那user.data.userId真的會給我們提供一些用戶ID