如何让$ routeProvider在angularjs中正常工作

时间:2015-02-05 17:43:58

标签: javascript angularjs configuration angularjs-ng-route

我正在尝试手动构建一个shell,试图弄清楚它是如何工作的

结构:

- application(php stuff)

- webroot
-- app
--- app.js

-- templates
--- main
---- login
----- login.html

index.html (with angularjs libs)

app.js:

function config($routeProvider){
    $routeProvider
        .when("/login",{
            templateUrl: "../templates/main/login/login.html"
        })
        .otherwise({ redirectTo:"/other" });
}


angular
    .module("app", ["ngRoute", "ngResource"])
    .config(config);

登录:

<div>LOGIN test template</div>

“/ other”不会退出。 除此之外我尝试了不同的方法: templateUrl:“templates / main / login / login.html” templateUrl:“webroot / templates / main / login / login.html”

顺便说一下,网址带有“#”(例如nameDomain.com/#/login,但它应该是nameDomain.com/#login),但angularjs似乎只允许/ nameUrlTemplate

1 个答案:

答案 0 :(得分:1)

看一下Angular的routeProvider文档,因为这可以解决你的一些困惑。

我认为你想在这里做的是使用.otherwise中的现有路线,因为/other未在任何地方定义,因此Angular不会知道你用它做什么:

var app = angular.module('app', ['ngRoute', 'ngResource']);
app.config(function config($routeProvider) {
  $routeProvider
    .when('/', {
      templateUrl: '../templates/main/index.html'
    })
    .when('/login', {
      templateUrl: '../templates/main/login/login.html'
    })
    .otherwise({
      redirectTo: '/'
    });
});

我相信这应该会给你你正在寻找的效果。显然,你可以根据需要调整它,例如,如果你想为你没有定义的任何东西设置404路径/模板。就目前而言,这将始终回溯到不存在的特定路线的主页。当您考虑用户和登录/退出状态时,这会变得更加复杂,但这更像是一个概念验证。

此外,ngRoute默认情况下会呈现/#/foo格式的网址,因为它使用的是hashbang风格格式,这样搜索引擎的抓取工具就可以解析和阅读各种搜索引擎JavaScript webpp的页面/状态。你所指的是一个文档片段,它可以被非索引。您可以在Google Webmaster docs上了解有关差异的更多信息。