angularjs - change - angular set meta tags
modo html5 con el servicio ronco no funciona (2)
Intenta agregar esto en el módulo de la aplicación raíz en el bloque de configuración. Asegúrese de incluir / inyectar $ locationProvider.
$locationProvider
.html5Mode({
enabled: true,
requireBase: false
})
.hashPrefix(''!'');
En el archivo grunt, el bloque livereload se ve así:
livereload: {
options: {
open: true,
middleware: function(connect, options, middleware) {
var optBase = (typeof options.base === ''string'') ? [options.base] : options.base;
return [
[require(''connect-modrewrite'')([''!(//..+)$ / [L]''])].concat(
optBase.map(function(path) {
return connect.static(path);
})),
connect.static(''.tmp''),
connect().use(
''/bower_components'',
connect.static(''./bower_components'')
),
connect().use(
''/app/styles'',
connect.static(''./app/styles'')
),
connect.static(appConfig.app)
];
}
}
},
Agregar:
[require(''connect-modrewrite'')([''!(//..+)$ / [L]''])].concat(
optBase.map(function(path){ return connect.static(path); })),
usé para funcionar para habilitar el modo html5, de lo contrario, mis rutas no se cargan sin #! cuando intento volver a cargar a través del navegador.
Tengo base href = ''/'' agregado y html5Mode (true) en config. ¿Hay algo más que pueda probar? ¿Por qué realmente dejaría de funcionar?
Nota: Resulta que mi URL tiene un punto y que no está siendo manejada por la regla de reescritura de la modificación de la conexión tan bien. ¿Alguna idea de cómo cambiar eso y habilitarlo para manejar punto en URL?
Creo que el problema del punto es un efecto secundario del problema general. Tener la misma configuración, más o menos. Simplemente html5Mode
el html5Mode
en .config()
esta manera:
if (window.location.host == ''localhost:9000'') {
$locationProvider.html5Mode(false);
$locationProvider.hashPrefix('''');
} else {
$locationProvider.html5Mode(true);
}
La aplicación seguirá prefijando todas las URL con #/
en modo de desarrollo, haciendo que las URL, los enlaces y la carga en vivo sean un problema. Resuelto esto por una pequeña directiva que cambia regular /urls
a /#/urls
:
var isLocalHost = (location.hostname === "localhost" || location.hostname === "127.0.0.1");
angular.module(''myApp'').directive(''debugLink'', function($timeout) {
return {
restrict: ''A'',
link: function(scope, element, attrs) {
$timeout(function() {
var href = element.attr(''href'');
if (href && isLocalHost && href.charAt(0) == ''/'') {
element.attr(''href'', ''#''+href);
}
}, 100);
}
}
});
Ahora, los enlaces se pueden hacer mediante el <a href="/url" debug-link>link</a>
Finalmente uso el .htaccess
redirect de https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#how-to-configure-your-server-to-work-with-html5mode on el servidor de producción
RewriteEngine on
# Don''t rewrite files or directories
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# Rewrite everything else to index.html to allow html5 state links
RewriteRule ^ index.html [L]
Utilizo este enfoque en varios proyectos angularjs + gruñidos. Evita que se rompa la carga en vivo, es decir, cuando presiono Ctrl - S la página se actualiza y puedo usar las direcciones URL correctas en cualquier lugar. Supongo que nadie está interesado en tener prefijos o hashes en modo de producción.