2017-03-23 109 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

相关问题