【问题标题】:Passing data from one route view to another将数据从一个路由视图传递到另一个
【发布时间】:2017-08-16 14:34:18
【问题描述】:

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

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

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

有没有什么快速的方法来做这些小操作?

【问题讨论】:

  • stateparams 用于在状态之间进行更改,但这里我处于包含多个视图(模板和控制器)的单个状态中。
  • 为什么不将参数传递给您的子视图?
  • 你的意思是这样的 $state.go('view2', {param1: $scope.goodFood, param2: $scope.badFood} ?对不起,我最近才使用角度

标签: angularjs angular-ui-router angular-services ng-view


【解决方案1】:

我不想使用 $rootScope 来保存数据或创建新服务(因为我有很多视图会传递少量数据,因此为几行代码创建新的 jsfile 并不好玩)

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

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

然后只需根据需要添加新属性:

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

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

【讨论】:

    【解决方案2】:

    既然你已经指定了你想要遵循的方法,你应该创建以下

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

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

    【讨论】:

    【解决方案3】:

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

    routeUrl: /foods/:quality/:stars
    

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

    $routeParams.quality - $routeParams.stars
    

    【讨论】:

      猜你喜欢
      • 2015-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多