使用AngularJS $ routeProvider + OnsenUI ons.navigator.pushpage()进行导航

时间:2014-09-24 12:51:40

标签: angularjs navigation onsen-ui

我正在开发一个AngularJS + OnsenUI项目,我遇到导航问题。

我们说我有一个模块:

angular
    .module('app.home', ['ui.utils','ngRoute','ngAnimate'])
    .controller('HomeCtrl', HomeCtrl)
    .config(function($routeProvider) {
        $routeProvider
           .when('/', {
              templateUrl: 'path/to/home/template',
        controller: 'HomeCtrl'
    })
    .when('/test1', {
        templateUrl: 'path/to/template',
        controller: 'TestOneCtrl'
    })
    .when('/test2', {
        templateUrl: 'path/to/template',
        controller: 'TestTwoCtrl'
    })
    .otherwise({
        redirectTo: 'path/to/home/template'
    }); 

});

在HomeCtrl中,我应该(根据某些功能的结果)导航到test1.html或test2.html。我的问题是我不知道如何将routeProvider链接到ons.navigator.pushPage函数。

这不起作用:

var url = '/test1';
$scope.navigator.pushPage( url, { animation : 'slide' } );

这有效:

var url = '/absolute/path/to/template';
$scope.navigator.pushPage( url, { animation : 'slide' } );

我的问题是我需要做什么,所以我不必在url变量中写出模板的绝对路径?显然我错过了一些东西,但我无法弄清楚是什么。

提前致谢!

1 个答案:

答案 0 :(得分:0)

我认为这是因为 $ routeProvider 中使用的路径 pageUrl 中使用的路径的类型不同EM> navigator.pushPage()

$routeProvider.when(path, route);

navigator.pushPage(pageUrl, option);

路径类似于浏览器地址栏中找到的应用网址的模式或字符串。例如, "http://localhost:8000/app/index.html#/test1" 。您可以在 routeProvider 中将此作为" / test1" 引用。但是,在 navigator.pushPage()中,您需要为页面指定确切的URL,就像在 $ routeProvider templateUrl 一样>。换句话说, pageUrl = route

这只是我的理解。