2017-03-23 113 views
1

我想使用ui-Router在Angularjs中將一些值從一個視圖傳遞到另一個視圖。
我不想使用$ rootScope來保存數據或創建一個新的服務(因爲我有許多視圖傳遞少量的數據,所以爲幾行代碼創建新的jsfile並不是很有趣)。什麼我想要做一個超精縮的例子是:將數據從一個路由視圖傳遞到另一個路由視圖

視圖控制器1
$scope.goodFood = 10 $scope.badFood = 2

視圖控制器2
$scope.results = 10 - 2 (from view 1's scope)

有沒有什麼快速的方法這些小操作?

+0

$ stateParams https://github.com/angular-ui/ui-router/wiki/URL-Routing – yBrodsky

+0

stateparams用於狀態之間的切換,但在這裏我處於包含多個視圖(模板和控制器)的單一狀態中, 。 – Jamie

+0

你爲什麼不把這個參數傳遞給你的子視圖? – yBrodsky

回答

1

我不想使用$ rootScope保存數據或創建新的服務(因爲我有傳遞數據的小塊這麼多的意見爲幾行代碼創建新的jsfile代碼並不好玩)

沒有必要爲新的數據位創建新的服務。只需使用一個對象創造價值的服務:

app.value("viewData", {}); 

然後,只需根據需要添加新的屬性:

app.controller("viewCtrl", function(viewData) { 
    viewData.newProp = "new info"; 
    console.log(viewData.oldProp); 
}); 

由於增值服務是單身,更改對象的內容將生存觀念的變化。

0

最簡單的方法是通過路由或查詢字符串將所有數據直接存儲到$ routeParams中。

routeUrl: /foods/:quality/:stars 

然後在你的控制器既然你已指定您希望採取的辦法,你可以訪問

$routeParams.quality - $routeParams.stars 
1

,你應該創建以下

$stateProvider 
    .state('view2', { 
     url: "/view2/:param1/:param2", 
     templateUrl: 'view2.html', 
     controller: function ($stateParams) { 
      console.log($state.params.param1+"-"+$state.params.param2); 
     } 
    }); 

,並從任何你想致電

$state.go('view2',{param1:'10', param2:'2'}); 

但是總的來說,建議您將這些值保存在服務中或存儲的某些值中。隨着越來越多的應用程序,你可能不得不使用了更多的屬性來計算

+1

你可以指定接收什麼參數,即使參數不會出現在URL中。請參見[使用參數而不指定它們在狀態URL中](https://github.com/angular-ui/ui-router/wiki/URL-Routing#using-parameters-without-specifying -them合狀態的URL) – georgeawg

相關問題