2012-12-06 138 views
4

我對AngularJS的範圍和位置有一些問題。這裏有一個例子:angularjs位置範圍

function CreateAccountCtrl($scope, $http, $location) { 
    ... 
    $http.post(url,$scope.form). 
     success(function(data){ 
      $location.path('/'); // I need to transfert data to the location 
     } 
} 

我的問題是:我希望將數據傳輸到/控制器,我想用rootScope,但我不認爲這是做到這一點的最好辦法。

有什麼想法?

+1

要通過控制器之間的數據,你可以創建在兩個控制器注入了共享服務,或者如果數據不是複雜的只是調用/一些參數,然後使用$ routeParams訪問它們。 – matys84pl

回答

1

使用$ routeParams服務。

function CreateAccountCtrl($scope, $http, $location) { 
    ... 
    $http.post(url,$scope.form). 
     success(function(data){ 
      $location.path('/account/' + data.accountId); 
     } 
} 

配置在$ routeProvider路線:

$routeProvider.when('/account/:accountId', { 
    template: 'account.html', 
    controller: AccountCntl 
}); 

你的AccountController現在可以訪問數據:

function AccountCtrl($scope, $routeParams) { 
    $scope.accountId = $routeParams.accountId; 
} 
6

您可以使用$ rootScope到控制器之間發送數據。 $ routeParams不允許發送複雜的數據結構。 讓我們來看看它。

將成功回調的返回數據分配給變量$ rootScope。 導航到AccountController。

function CreateAccountCtrl($scope, $http, $location,$rootScope) { 
    ... 
    $http.post(url,$scope.form). 
     success(function(data){ 
      $rootScope.accountInfo = data; 
      $location.path('/account'); 
     } 
} 

配置在$ routeProvider路線:

$routeProvider.when('/account', { 
    template: 'account.html', 
    controller: AccountCntl 
}); 

在的AccountController可以訪問$ rootScope數據。

function AccountCtrl($scope, $rootScope) { 
    $scope.accountInfo = $rootScope.accountInfo; 
} 
+0

我認爲這是迄今爲止實現這一目標的最佳方法。唯一的問題是如果一個不同的控制器在Rootcope上加載了錯誤的模型。 – astroanu