angular页面参数传值问题

Warden
  • 479

我想通过ui-router的$state.go传递参数,可不知道为何在目标页面上收不到值。
路由配置:

.state('channelconfig',{
    url:'/channel/channelconfig',
    views:{
        'content':{
            templateUrl:'tpls/channel/channelconfig.html',
            controller:'channelconfigCtrl',
            controllerAs:'channelconfig'
        },
        'leftmenu':{
            templateUrl:'layouts/menu.html'
        }
    },
    params : {//跳转设置参数
        channelInfo:null
    }
})

点击跳转的页面

<tr ng-repeat="x in channels">
    <td class="am-text-middle"><input type="checkbox" name=""></td>
    <td class="am-text-middle">{{x.channel_name}}</td>
    <td class="am-text-middle">{{x.channel_type}}</td>
    <td class="am-text-middle">{{x.brand_name}}</td>
    <td class="am-text-middle">{{x.self_help}}</td>
    <td class="am-text-middle">{{x.data_spider}}</td>
    <td class="am-text-middle">{{x.create_at}}</td>
    <td class="am-text-middle">{{x.update_at}}</td>
    <td class="am-text-middle">{{x.admin_name}}</td>
    <td class="am-text-middle">
        <button class="am-btn am-btn-default am-btn-xs am-radius am-icon-pencil-square-o" type="button" ng-click="jump(x);">修改</button>
        <button class="am-btn am-btn-default am-btn-xs am-radius am-icon-remove am-icon-close" type="button">删除</button>
    </td>
</tr>

跳转的函数:

    $scope.jump = function (data) {
        console.log(data);
        $state.go('channelconfig', {channelInfo: data});
    };

接受数据的页面:

egDataApp.
controller('channelconfigCtrl', ['$scope','$http','$state','$stateParams',function ($scope,$http,$state, $stateParams) {
    $scope.list = {};
    $scope.list_part = {};
    $scope.formdata = {};
    var channelInfo = $stateParams.channelInfo;
    console.log(channelInfo);

报错信息:传的时候打印的data有值,但是跳过去之后接收不到数据

clipboard.png

不知道哪里可能会有问题,求大神帮忙看看

回复
阅读 4.5k
5 个回答
G_Koala_C
  • 5.1k
✓ 已被采纳

ng1的路由应该是不能传对象的。你可以试试这个,原理是这样,但不确定能不能传这么多字段。

.state('channelconfig',{
    url:'/channel/:brand_id/:brand_name/:channel_name/:type/:self_help',
    views:{
        'content':{
            templateUrl:'tpls/channel/channelconfig.html',
            controller:'channelconfigCtrl',
            controllerAs:'channelconfig'
        },
        'leftmenu':{
            templateUrl:'layouts/menu.html'
        }
    }
})

$state.go('channelconfig', {
    brand_id: value,
    brand_name:value,
    channel_name: value,
    type:value
    self_help:value
});

===========================
一般都是传一个id,然后在下一个页面通过id去查找数据。

戳我之前自己也遇到过

没发现什么问题,'leftmenu':{

        templateUrl:'layouts/menu.html'
    }这个不要加控制器吗?
yzllee
  • 2.6k

$stateParams服务获取的参数是路由中url后面所带的参数

1.使用localStorage或sessionStorage来传递DATA。

2.使用factory。

.factory('myFactory', function () {
    //定义factory返回对象
    var myServices = {};    
    //定义参数对象
    var myObject = {};
    
    var _set = function (data) {
       myObject = data;     
    };
    var _get = function () {
        return myObject;
    };

    myServices.set = _set;
    myServices.get = _get;
    
    // 在controller中通过调set()和get()方法可实现提交或获取参数的功能
    return myServices;
  
});

channelInfo:null --改为--> channelInfo:'' 看看

宣传栏