SA_*_*A__ 19 javascript php laravel angularjs angularjs-directive
这是我app.js 在AngularJS中的路由文件
var app = angular.module('myApp', ['ngRoute', 'ngAnimate', 'toaster']);
app.config(['$routeProvider',
function ($routeProvider) {
$routeProvider.
when('/login', {
title: 'Login',
templateUrl: 'resources/views/layouts/loginUser.php',
controller: 'authCtrl'
})
.when('/', {
title: 'Login',
templateUrl: 'resources/views/layout/login.php',
controller: 'logoutCtrl'
})
.when('/reset', {
title: 'Reset Password',
templateUrl: 'resources/views/layouts/forgetPassword.php',
controller: 'authCtrl'
})
.when('/invalidtoken', {
title: 'Login',
templateUrl: 'resources/views/layout/invalidtoken.php',
controller: 'authCtrl',
role: '0'
})
//$locationProvider.html5Mode(true);
}])
.run(function ($rootScope, $location, Data, $http) {
$rootScope.$on("$routeChangeStart", function (event, next, current) {
var nextUrl = next.$$route.originalPath;
if (nextUrl == '/signin' || nextUrl == '/login' || nextUrl == '/verify' || nextUrl == '/register' || nextUrl == '/registered' || nextUrl == '/reset' || nextUrl == '/resetdone' || nextUrl == '/registersuccess')
{
$location.path(nextUrl);
}
else
{
$location.path('/');
}
});
});
Run Code Online (Sandbox Code Playgroud)
在这里,我使用.run来处理少量请求.
我想从网址中删除#以使网址漂亮,
所以我这样做是为了删除这里建议的#
app.config(['$routeProvider', '$locationProvider'
function ($routeProvider, $locationProvider) {
Run Code Online (Sandbox Code Playgroud)
在最后一行
$locationProvider.html5Mode(true);
Run Code Online (Sandbox Code Playgroud)
但是应用程序没有发生任何事情,它仍然在网址中有#.
即便我尝试过这种方式
我怎样才能实现这一目标?
更新:
如果我做
.run(function ($rootScope, $location, Data, $http, $locationProvider) {
Run Code Online (Sandbox Code Playgroud)
在最后一行
$locationProvider.html5Mode(true);
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误
Error: $injector:unpr
Unknown Provider
Run Code Online (Sandbox Code Playgroud)
我在很多方面都尝试过,但都没有工作.
更新2:
或者任何人都可以建议一个angularjs示例的链接,它提供了没有#在url中的示例?
你为什么要用.run()?添加 <base href="/" />到你<head>的身体或开始你的身体(第一行)然后匹配你的.run()的逻辑尝试这个(.otherwise("/path")给你$routeProvider):
var app = angular.module('myApp', ['ngRoute', 'ngAnimate', 'toaster']);
app.config(['$routeProvider', '$locationProvider',
function ($routeProvider, $locationProvider) {
$routeProvider.
when('/login', {
title: 'Login',
templateUrl: 'resources/views/layouts/loginUser.php',
controller: 'authCtrl'
})
.when('/', {
title: 'Login',
templateUrl: 'resources/views/layout/login.php',
controller: 'logoutCtrl'
})
.when('/reset', {
title: 'Reset Password',
templateUrl: 'resources/views/layouts/forgetPassword.php',
controller: 'authCtrl'
})
.when('/invalidtoken', {
title: 'Login',
templateUrl: 'resources/views/layout/invalidtoken.php',
controller: 'authCtrl',
role: '0'
})
. otherwise("/");
$locationProvider.html5Mode(true);
}]);
Run Code Online (Sandbox Code Playgroud)
如果您仍然遇到问题,我建议您https://github.com/angular-ui/ui-router
更新:
您的 index.html
<!DOCTYPE html>
<html lang="en" ng-app="myApp">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Green Hopping</title>
<link rel="shotcut icon" type="favicon.ico" href="public/images/favicon.ico" />
<link rel="icon" type="favicon.ico" href="public/images/favicon.ico" />
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.2/angular.min.js"></script>
<script src="https://code.angularjs.org/1.4.2/angular-route.min.js"></script>
</head>
<body ng-cloak="">
<base href="/">
<div data-ng-view="" id="ng-view" class="slide-animation"></div>
</body>
<script>
var app = angular.module('myApp', ['ngRoute']);
app.config(['$routeProvider', '$locationProvider',
function ($routeProvider, $locationProvider) {
$routeProvider.
when('/', {
title: 'Home',
templateUrl: 'home.html',
controller: 'homeCtrl'
})
.when('/login', {
title: 'Login',
templateUrl: 'login.html',
controller: 'authCtrl'
})
.when('/logout', {
title: 'Logout',
templateUrl: 'logout.html',
controller: 'logoutCtrl'
})
.when('/dashboard', {
title: 'Dashboard',
templateUrl: 'dashboard.html',
controller: 'dashboardCtrl'
})
.otherwise('/');
$locationProvider.html5Mode(true);
}])
.run(function ($rootScope, $location, $http, loginSrv) {
$rootScope.$on("$routeChangeStart", function (event, next, current) {
var nextUrl = next.$$route.originalPath;
var orUseUrl = $location.path();
console.log(nextUrl);
if (nextUrl === '/logout'){loginSrv.logout();}
if (nextUrl === '/login'){loginSrv.login();}
if (loginSrv.loggedin === false) { $location.path('/'); }
else { $location.path(nextUrl); }
});
});
app.service("loginSrv",function(){
var ls= this;
ls.loggedin = false;
ls.logout = function(){
ls.loggedin = false;
}
ls.login = function(){
ls.loggedin = true;
}
});
app.controller("homeCtrl",function($scope, loginSrv){
$scope.loggedin = loginSrv.loggedin;
})
app.controller("dashboardCtrl",function($scope, loginSrv){
$scope.loggedin = loginSrv.loggedin;
})
app.controller("authCtrl",function($scope, loginSrv){
$scope.loggedin = loginSrv.loggedin;
})
app.controller("logoutCtrl",function($scope, loginSrv){
$scope.loggedin = loginSrv.loggedin;
})
</script>
</html>
Run Code Online (Sandbox Code Playgroud)
所有其他模板都是这样的.复制粘贴以下home.html,login.html,dashboard.html,logout.html.Plunker将无法显示客户端路线的问题.试试这个.这是完全功能的代码.
<div>
<div><a href="/">Home</a> |
<a href="/login">Login</a> |
<a href="/dashboard">Dashboard</a> |
<a href="/logout">Logout</a></div>
<div> This is from the home/login/dashboard/logout Controller. Loggedin: {{loggedin}}</div>
</div>
Run Code Online (Sandbox Code Playgroud)
您是否偶然收到 404 错误?每当您将模式更改为 html5history 时,您都必须告诉 Web 服务器始终返回索引页,无论请求什么 URL。正如角度文档所说: https : //docs.angularjs.org/guide/$location
使用此模式需要在服务器端重写 URL,基本上您必须重写应用程序入口点的所有链接(例如index.html)。对于这种情况,需要
<base>标签也很重要,因为它允许 Angular 区分作为应用程序基础的 url 部分和应由应用程序处理的路径。
您是否尝试过这样做并正确配置它?另请记住,您必须指定应用程序的基本条目 href 才能使其正常工作
<base href="/" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3200 次 |
| 最近记录: |