• [转]ionic $state.go passed $stateParams


    本文转自:http://stackoverflow.com/questions/19516771/state-go-toparams-not-passed-to-stateparams

    If you want to pass non-URL state, then you must not use url when setting up your state. I found the answer on a PR and did some monkeying around to better understand.

    $stateProvider.state('toState', {
      templateUrl:'wokka.html',
      controller:'stateController',
      params: {
        'referer': 'some default', 
        'param2': 'some default', 
        'etc': 'some default'
      }
    });
    

    Then you can navigate to it like so:

    $state.go('toState', { 'referer':'jimbob', 'param2':37, 'etc':'bluebell' });
    

    Or:

    var result = { referer:'jimbob', param2:37, etc:'bluebell' };
    $state.go('toState', result);
    

    And in HTML thusly:

    <a ui-sref="toState(thingy)" class="list-group-item" ng-repeat="thingy in thingies">{{ thingy.referer }}</a>
    

    This use case is completely uncovered in the documentation, but I think it's a powerful means on transitioning state without using URLs.

    The Nathan Matthews's solution did not work for me but it is totally correct but there is little point to reaching a workaround:

    The key point is: Type of defined parameters and toParamas of $state.go should be same array or object on both sides of state transition.

    For example when you define a params in a state as follows you means params is array because of using "[]":

    $stateProvider
    .state('home', {
        templateUrl: 'home',
        controller:  'homeController'
    })
    .state('view', {
        templateUrl: 'overview',
        params:      ['index', 'anotherKey'],
        controller:  'overviewController'
    })
    

    So also you should pass toParams as array like this:

    params = { 'index': 123, 'anotherKey': 'This is a test' }
    paramsArr = (val for key, val of params)
    $state.go('view', paramsArr)
    

    And you can access them via $stateParams as array like this:

    app.controller('overviewController', function($scope, $stateParams) {
        var index = $stateParams[0];
        var anotherKey = $stateParams[1];
    });
    

    Better solution is using object instead of array in both sides:

    $stateProvider
    .state('home', {
        templateUrl: 'home',
        controller:  'homeController'
    })
    .state('view', {
        templateUrl: 'overview',
        params:      {'index': null, 'anotherKey': null},
        controller:  'overviewController'
    })
    

    I replaced [] with {} in params definition. For passing toParams to $state.go also you should using object instead of array:

    $state.go('view', { 'index': 123, 'anotherKey': 'This is a test' })
    

    then you can access them via $stateParams easily:

    app.controller('overviewController', function($scope, $stateParams) {
        var index = $stateParams.index;
        var anotherKey = $stateParams.anotherKey;
    });
    


  • 相关阅读:
    k8s 静态pod
    k8s pod资源配额对调度的影响
    mysql分库,动态数据库切换
    【转】 一个C#中的webservice的初级例子(二)
    【转】UpdatePanel 简单实例
    Linux远程mount文件系统
    【转】一个C#中webservice的初级例子(一)
    javascript读写文件
    SilverLight插件检测
    C#读写共享文件夹
  • 原文地址:https://www.cnblogs.com/freeliver54/p/5215999.html
Copyright © 2020-2023  润新知