将表格数据从一个控制器传递到另一个控制器

时间:2015-07-30 16:30:46

标签: angularjs cordova

.controller('CyclesController', function ($scope, $state) {
    $scope.age = 0;
    $scope.name = "";
    $scope.email = "";
    $scope.calculateByAge = function (age, name, email) {
        $scope.data = $scope.data || {};
        if (age > 0) {
            $scope.data.age = age;
            $scope.data.name = name;
            $scope.data.email = email;
            $state.go('tab.cycles-detail');
        }

    }

})

.controller('CyclesDetailController', function ($scope, $stateParams, CyclesService) {
    console.log('scope data', $scope.data); // <--- undefined.
})

这可能是一个愚蠢的问题,但可以从CyclesDetailController控制器上的表单中获取数据。

2 个答案:

答案 0 :(得分:0)

如果它是简单的属性,你可以通过路由来完成。只需更改您的&#34; tab.cycles-detai&#39; to&#39; tab.cycles-detai /:age&#39;在您的ui-router配置中,当您重定向时将其传递:$ state.go(&#39; tab.cycles-detail&#39;,{age:age});

在&#39; CyclesDetailController&#39;通过$ stateParams.age访问它;

e.g:

//app.config
//...

    .state('tab.cycles-detail', {
                    url: "^detail/{age:int}",
                    controller: 'CyclesDetailController',
                    templateUrl: "url_for_detail_template"
                })

//...

// CyclesController

.controller('CyclesController', function ($scope, $state) {
    $scope.age = 0;
    $scope.calculateByAge = function (age) {
        $scope.data = $scope.data || {};
        if (age > 0) {
            $scope.data.age = age;
            $state.go('tab.cycles-detail', {age: age);
        }

    }
})

//CyclesDetailController

.controller('CyclesDetailController', function ($scope, $stateParams, CyclesService) {
    console.log('scope data', $stateParams.age);
})

//

答案 1 :(得分:0)

如果您想将数据从一个路径传递到另一个路径,但又不想在浏览器菜单栏中显示它,则可以使用squash

示例 -

.state('app.enroll', {
    url: '/enroll/',
    params: {
        classId: {
            value: null,
            squash: true
        },
        className: {
            value: null,
            squash: true
        } 
    },
    title: 'Students Enrollment',
    templateUrl: helper.basepath('enroll.html')        
})

第二种技术 -

您可以使用 localStorage / cookies 保存数据并在以后检索。

第三种技术 -

您始终可以通过控制器之间的服务/工厂共享数据。