Javascript 如何从angularjs ng路由中删除散列
我试图使用locationProvider从angular js中的url路由中删除hashtag,但它给了我一个错误 app.jsJavascript 如何从angularjs ng路由中删除散列,javascript,angularjs,angular-routing,Javascript,Angularjs,Angular Routing,我试图使用locationProvider从angular js中的url路由中删除hashtag,但它给了我一个错误 app.js var eclassApp = angular.module('eclassApp', ['ngRoute', 'eclassControllers', ] ); eclassApp.config(['$routeProvider','$locationProvider', function ($routeProvider, $location
var eclassApp = angular.module('eclassApp',
['ngRoute', 'eclassControllers', ]
);
eclassApp.config(['$routeProvider','$locationProvider',
function ($routeProvider, $locationProvider){
$routeProvider.
when('/',{
templateUrl: '/html/student-list.html',
controller: 'StudentsListCtrl',
}).
when('/students/:studentId',{
templateUrl: '/html/student-details.html',
controller: 'StudentDetailsCtrl',
}).otherwise({
redirectTo: '/students'
});
$locationProvider.htmlMode(true);
}]
);
错误:
Uncaught Error: [$injector:modulerr] http://errors.angularjs.org/1.3.13/$injector/modulerr?p0=eclassApp&p1=TypeE…oogleapis.com%2Fajax%2Flibs%2Fangularjs%2F1.3.13%2Fangular.min.js%3A17%3A1)
我错过什么了吗
编辑:使用如下选项对象调用html5Mode函数
$locationProvider.html5Mode({
enabled:true
})
var app = angular.module('ngCribs', ['ui.bootstrap', 'ui.router']);
app.config(['$stateProvider', '$urlRouterProvider', '$locationProvider', function($stateProvider, $urlRouterProvider, $locationProvider) {
// Application routes
$stateProvider
.state('index', {
url: '/',
templateUrl: 'views/partials/home.html'
})
.state('listings', {
url: '/listings',
templateUrl: 'views/partials/listings-list.html'
});
// For unmatched routes
$urlRouterProvider.otherwise('/');
$locationProvider.html5Mode(true);
}]);
我得到以下错误(更改为“角度完全”,以便更好地解释缩小版的错误istead)
错误:[$location:nobase]$location在HTML5模式下需要一个标记!
您可以像这样使用$locationProvider-
$locationProvider.html5Mode({
enabled: true,
requireBase: false
});
或者,您可以在index.html中使用base标记(我想这是您的登录页)
删除基本标记可能会在旧IE浏览器(如IE9)中产生一些副作用。在依赖项数组中有一个额外的逗号。您可以删除逗号,也可以在html的头部分中包含基本标记,您可以很好地删除hashtags
<base href="/">
从URL中删除#的步骤:
- 步骤1:在角度根的
函数中插入config()
模块并将$locationProvider
设置为true,语法在html5Mode()
angular 1.3上更改 版本
- 步骤2:在
web.config
我知道这已经有一年了,但我至今还没有找到一个简洁完整的解决方案。这些都是网络上的一些答案中的零碎部分,所以我将在这里详细解释,希望它能成为其他访问者获得完整答案的地方*我想在答案后面加上,但这太长了。那么,让我们开始吧 首先,您需要下载ngRoute或angular ui路由器。我选择后者是因为它已经包含了ngRoute中的所有内容,而且它还有更多的功能。那为什么不呢
npm install --save angular-ui-router
$locationProvider.html5Mode({
enabled:true
})
var app = angular.module('ngCribs', ['ui.bootstrap', 'ui.router']);
app.config(['$stateProvider', '$urlRouterProvider', '$locationProvider', function($stateProvider, $urlRouterProvider, $locationProvider) {
// Application routes
$stateProvider
.state('index', {
url: '/',
templateUrl: 'views/partials/home.html'
})
.state('listings', {
url: '/listings',
templateUrl: 'views/partials/listings-list.html'
});
// For unmatched routes
$urlRouterProvider.otherwise('/');
$locationProvider.html5Mode(true);
}]);
并添加基本目录
<base href="/"> </base>
server.js
文件,将其放在目录的底部,并将以下内容放在其中*确保文件夹路径与目录匹配,以便找到它们
var express = require('express');
var server = express();
server.use(express.static(__dirname + '/'));
server.set('views', __dirname + 'views');
server.set('js', __dirname + 'js');
server.set('css', __dirname + 'css');
server.get('/', function(req, res){
res.render('index.ejs');
});
server.all('/*', function(req, res, next) {
// Just send the index.html for other files to support HTML5Mode
res.sendFile('index.html', { root: __dirname });
});
//the port you want to use
var port = 3006;
server.listen(port, function(){
console.log('server listening on port' + port)
});
npm install ejs --save
node server.js
localhost:3006
并导航,就像您在一个已为您配置的实时服务器中一样$locationProvider.hashPrefix(“!”).html5Mode(true)代码>
在这一行之前:
$routeProvider。
在Angular 1.6.1版本上测试:
从URL中删除hashtag(#)需要3个步骤
步骤1:通过配置在locationProvider上启用HTML5模式。示例代码:
app.config(function($locationProvider, $routeProvider){
$locationProvider.html5Mode(true);
$routeProvider.when('/', {templateUrl: 'partials/home.html'}).when('/info', {templateUrl: 'partials/info.html'});
});
步骤2:在index.html
的头部分提供一个basehref
属性。这应该放在所有脚本和CSS标记的顶部。href
属性定义项目的相对路径。示例代码:base href=“/demo/”
。我的演示应用程序位于ApacheWeb服务器的根目录上。如果您的应用程序是一个子目录,请使用:base href=“/demo/sub-directory/”
或base href=”http://localhost/demo/sub-directory/“
步骤3:如果您正在Apache服务器上运行这个AngularJS应用程序(Wamp、Mamp等):从其他StackOverflow帖子中,您应该启用url重写
模块。从Apache版本2.2+开始,这可以通过以下命令实现:FallbackResource
。示例代码:在Apache服务器的根目录上创建一个.htaccess
文件。添加以下命令并重新启动服务器。提供相对路径index.html
,用于处理由于角度路由功能而导致的404错误。这将解决刷新/访问深度url和所有404错误
FallbackResource /demo/sub-directory/index.html
不要将hashtag(搜索链接的标识符)与URL中的片段标识符混淆。他们唯一的共同点就是使用了散列字符。我认为这篇文章可以帮助你使用@Quentin yes true…我使用散列字符。是的,我理解。但我不能理解基本URL和相对URL。我的html文件在html文件夹中,所以它是。我想我必须像这样设置基本标记,因为当我将href设置为“/”时,它将不起作用。我必须在应用程序配置中将第一个url设置为“/html”。你能解释一下基地是如何运作的吗?我想我已经明白了!!在从角度路由1.2.x升级到1.3.13时,受到了这一新要求的冲击。选择了你的第二个解决方案。是的,python也为我这样做,问题解决了吗?是的,谢谢。现在我有另一个关于angular中url路由的问题,我将为其打开一个单独的问题:)
var express = require('express');
var server = express();
server.use(express.static(__dirname + '/'));
server.set('views', __dirname + 'views');
server.set('js', __dirname + 'js');
server.set('css', __dirname + 'css');
server.get('/', function(req, res){
res.render('index.ejs');
});
server.all('/*', function(req, res, next) {
// Just send the index.html for other files to support HTML5Mode
res.sendFile('index.html', { root: __dirname });
});
//the port you want to use
var port = 3006;
server.listen(port, function(){
console.log('server listening on port' + port)
});
npm install ejs --save
node server.js
app.config(function($locationProvider, $routeProvider){
$locationProvider.html5Mode(true);
$routeProvider.when('/', {templateUrl: 'partials/home.html'}).when('/info', {templateUrl: 'partials/info.html'});
});
FallbackResource /demo/sub-directory/index.html