将数据从一个路由视图传递到另一个

Passing data from one route view to another

我想在 Angularjs 中使用 ui-Router 将一些值从一个视图传递到另一个视图。
我不想使用 $rootScope 来保存数据或创建新服务(因为我有许多视图传递少量数据,因此为几行代码创建新的 jsfile 并不好玩)。我想做的一个超级缩小的例子是:

视图 1 的控制器
$scope.goodFood = 10 $scope.badFood = 2

视图 2 的控制器
$scope.results = 10 - 2 (from view 1's scope)

有什么 quick 方法可以做这些小操作吗?

最简单的方法是通过路由或查询字符串将所有数据直接存储到 $routeParams 中。

routeUrl: /foods/:quality/:stars

然后在您的控制器中您可以访问

$routeParams.quality - $routeParams.stars

既然您已经指定了想要遵循的方法,那么您应该创建以下内容

$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'});

但一般来说,建议您将这些值保存在服务中或存储在某些地方。随着应用程序的增长,您可能不得不使用更多的属性来计算

I don't want to use $rootScope to save data or create a new services ( as I have many views that pass small bits of data so creating new jsfile for few lines code is not fun)

无需为新数据位创建新服务。只需使用对象创建价值服务:

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

然后根据需要简单地添加新属性:

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

由于值服务是单例,因此对象内容的更改将在视图更改后继续存在。