Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用户界面路由器问题与转换_Javascript_Angularjs_Angular Ui Router - Fatal编程技术网

Javascript 用户界面路由器问题与转换

Javascript 用户界面路由器问题与转换,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,我正在尝试使用参数可变的路由,这样我就可以使用参数来检查要解析的状态。 我制作了一个简化的plunker,它演示了我要做的事情。 问题是目标路由的控制器似乎没有启动。然而,解决方案已经完成 这是代码,下面是指向plunker的链接: var myapp = angular.module('myapp', ["ui.router"]); myapp.config(function($stateProvider, $urlRouterProvider) { $stateProvider

我正在尝试使用参数可变的路由,这样我就可以使用参数来检查要解析的状态。 我制作了一个简化的plunker,它演示了我要做的事情。 问题是目标路由的控制器似乎没有启动。然而,解决方案已经完成

这是代码,下面是指向plunker的链接:

var myapp = angular.module('myapp', ["ui.router"]);
myapp.config(function($stateProvider, $urlRouterProvider) {


  $stateProvider
    .state('default', {
      url: "/welcome",
      templateUrl: "def.html"
    })
    .state('redirect', {
      url: "/{param1}/{param2}",
      params: {
        param1: {
          value: 'foo'
        },
        param2: {
          value: 'bar'
        }
      },
      template: '<ui-view></ui-view>'
    })
    .state('redirect.first', {
      templateUrl: "route1.html"
    })
    .state('redirect.second', {
      templateUrl: "route2.html",
      controller: function() {
        console.log('in controller');
      },
      resolve: {
        test: function($stateParams) {
          console.log($stateParams);
          return 'test';
        }
      }
    });


  $urlRouterProvider.otherwise('/');
})

.run(function($rootScope, $injector) {

  var $state = $injector.get('$state');

  $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
    console.log('entering state change start');
    if (toState.name == 'redirect') {
      $state.transitionTo('redirect.second', toParams, {
        location: true,
        inherit: true,
        reload: true,
        notify: true
      });
    }
  });
});
var myapp=angular.module('myapp',[“ui.router”]);
myapp.config(函数($stateProvider,$urlRouterProvider){
$stateProvider
.state('默认'{
网址:“/欢迎”,
templateUrl:“def.html”
})
.state('重定向'{
url:“/{param1}/{param2}”,
参数:{
参数1:{
值:“foo”
},
参数2:{
值:“bar”
}
},
模板:“”
})
.state('redirect.first'{
templateUrl:“route1.html”
})
.state('redirect.second'{
templateUrl:“route2.html”,
控制器:函数(){
console.log('in controller');
},
决心:{
测试:函数($stateparms){
console.log($stateparms);
返回“测试”;
}
}
});
$urlRouterProvider。否则('/');
})
.run(函数($rootScope,$injector){
var$state=$injector.get(“$state”);
$rootScope.$on(“$stateChangeStart”,函数(事件、toState、toParams、fromState、fromParams){
console.log(“进入状态更改开始”);
如果(toState.name==“重定向”){
$state.transitiono('redirect.second',toParams{
地点:对,
继承:是的,
是的,
通知:正确
});
}
});
});

您需要使用
ui sref=“redirect.first”
语法,而不是
href=“/”


下面是一个工作示例:

我们需要的是通过
event.preventDefault()停止默认导航(此处更新)

检查一下


还要检查一下

@ryeballar。plunker设计得不好,我只展示了问题中提出的问题。答案是:只有在阻止默认设置的情况下才能执行重定向。。。如果你知道我的意思。但是为了使它正常工作,状态和导航应该重写Hanks,我知道Plunker中存在一些问题,从模板开始,并进行了快速修复。我们将很快尝试此解决方案。保持你的更新。@DriesMarien是的,如果你做到了,那就好了。
ui路由器
是很棒的库,也是我见过的最好的文档;)@RadimKöhler您的解决方案运行良好!谢谢你的意见!很高兴见到你,先生!:)享受奇妙的
ui路由器
$rootScope.$on('$stateChangeStart', function(event, toState,   toParams
                                                  , fromState, fromParams){    
    if(toState.name == 'redirect'){
        // HERE
        // the default must be stop, to redirect...
        event.preventDefault();
        $state.transitionTo('redirect.second', toParams
             , { location:true, inherit:true, reload:true, notify:true });
    }
});