Apakah mungkin untuk menghapus simbol # dari URL angular.js?
Saya masih ingin dapat menggunakan tombol kembali browser, dll, ketika saya mengubah tampilan dan akan memperbarui URL dengan params, tetapi saya tidak ingin simbol #.
Tutorial routeProvider dinyatakan sebagai berikut:
angular.module('phonecat', []).
config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/phones', {templateUrl: 'partials/phone-list.html', controller: PhoneListCtrl}).
when('/phones/:phoneId', {templateUrl: 'partials/phone-detail.html', controller: PhoneDetailCtrl}).
otherwise({redirectTo: '/phones'});
}]);
Bisakah saya mengedit ini untuk memiliki fungsi yang sama tanpa #?
Jawaban:
Ya, Anda harus mengonfigurasi
$locationProvider
dan mengaturhtml5Mode
ketrue
:sumber
html5Mode(true)
. Di IE Anda harus menggunakan#
rute.IE lt 10
berarti Internet Explorer kurang dari versi 10$locationProvider.html5Mode(true);
diif !(IE lt 10)
?Pastikan untuk memeriksa dukungan browser untuk API riwayat html5:
sumber
If the HTML5 History API is not supported by a browser, the $location service will fall back to using the hashbang URLs automatically
Untuk menghapus tag hash untuk URL cantik dan juga agar kode Anda berfungsi setelah minifikasi, Anda perlu menyusun kode seperti contoh di bawah ini:
sumber
requireBase: false
+1$locationProvider.html5Mode
kode, kode saya$urlRouterProvider.otherwise('/home');
berhenti bekerja.Saya menulis aturan di web.config setelah
$locationProvider.html5Mode(true)
diaturapp.js
.Semoga, bantu seseorang keluar.
Di index.html saya menambahkan ini ke
<head>
Jangan lupa untuk menginstal url rewriter untuk iis di server.
Juga jika Anda menggunakan Web Api dan IIS, url pertandingan ini tidak akan berfungsi, karena itu akan mengubah panggilan api Anda. Jadi tambahkan input ketiga (kondisi baris ketiga) dan berikan pola yang akan mengecualikan panggilan dari
www.yourdomain.com/api
sumber
Jika Anda berada di .NET stack dengan MVC dengan AngularJS, inilah yang harus Anda lakukan untuk menghapus '#' dari url:
Siapkan markas Anda di halaman _Layout Anda:
<head> <base href="https://stackoverflow.com/"> </head>
Lalu, tambahkan berikut ini di konfigurasi aplikasi sudut Anda:
$locationProvider.html5Mode(true)
Di atas akan menghapus '#' dari url tetapi penyegaran halaman tidak akan berfungsi misalnya jika Anda berada di refreash halaman "yoursite.com/about" akan memberi Anda 404. Ini karena MVC tidak tahu tentang perutean sudut dan menurut pola MVC. akan mencari halaman MVC untuk 'about' yang tidak ada di jalur routing MVC. Solusi untuk ini adalah mengirim semua permintaan halaman MVC ke tampilan MVC tunggal dan Anda dapat melakukannya dengan menambahkan rute yang menangkap semua
url:
sumber
Anda dapat mengubah html5mode tetapi itu hanya berfungsi untuk tautan yang termasuk dalam html jangkar halaman Anda dan bagaimana url terlihat di bilah alamat browser. Mencoba meminta subhalaman tanpa tagar (dengan atau tanpa html5mode) dari mana saja di luar halaman akan menghasilkan kesalahan 404. Misalnya, permintaan CURL berikut akan menghasilkan kesalahan halaman yang tidak ditemukan, terlepas dari html5mode:
meskipun yang berikut ini akan mengembalikan halaman utama / home:
Alasan untuk ini adalah bahwa apa pun setelah tagar dilepas sebelum permintaan tiba di server. Jadi permintaan untuk
http://foo.bar/#/portfolio
tiba di server sebagai permintaanhttp://foo.bar
. Server akan merespons dengan 200 respons OK (mungkin) untukhttp://foo.bar
dan agen / klien akan memproses sisanya.Jadi jika Anda ingin membagikan url dengan orang lain, Anda tidak punya pilihan selain menyertakan tagar.
sumber
Ikuti 2 langkah-
1. Pertama, atur $ locationProvider.html5Mode (true) di file konfigurasi aplikasi Anda.
Untuk misalnya -
angular.module('test', ['ui.router']) .config(function($stateProvider, $urlRouterProvider, $locationProvider) { $locationProvider.html5Mode(true); $urlRouterProvider.otherwise('/'); });
2.Kunci kedua <base> di dalam halaman utama Anda.
Untuk mis ->
<base href="https://stackoverflow.com/">
Layanan $ location akan secara otomatis mundur ke metode hash-part untuk browser yang tidak mendukung API Riwayat HTML5.
sumber
Solusi saya adalah membuat .htaccess dan menggunakan kode #Sorian .. tanpa .htaccess saya gagal menghapus #
sumber
Menurut dokumentasi. Kamu bisa memakai:
Misalnya: Jika Anda mengklik:
<a href="https://stackoverflow.com/other">Some URL</a>
Di Browser HTML5 : angular akan secara otomatis dialihkan ke
example.com/other
Di Bukan HTML5 Browser : angular akan secara otomatis dialihkan ke
example.com/#!/other
sumber
Jawaban ini mengasumsikan bahwa Anda menggunakan nginx sebagai proxy terbalik dan Anda sudah menyetel $ locationProvider.html5mode menjadi true.
-> Untuk orang-orang yang mungkin masih berjuang dengan semua hal keren di atas.
Tentunya, solusi @maxim grach berfungsi dengan baik, tetapi untuk solusi bagaimana menanggapi permintaan yang tidak ingin tagar dimasukkan di tempat pertama yang dapat dilakukan adalah memeriksa apakah php mengirim 404 dan kemudian menulis ulang url. Berikut ini adalah kode untuk nginx,
Di lokasi php, deteksi 404 kesalahan php dan redirect ke lokasi lain,
Kemudian tulis ulang url di lokasi redirect dan proxy_pass data, offcourse, letakkan url situs web Anda di tempat url blog saya. (Permintaan: Pertanyakan ini hanya setelah Anda mencobanya)
Dan lihat keajaibannya.
Dan itu pasti berhasil, setidaknya bagi saya.
sumber
Mulai dari index.html hapus semua
#
dari<a href="#/aboutus">About Us</a>
sehingga harus terlihat seperti<a href="https://stackoverflow.com/aboutus">About Us</a>
. Sekarang di tag kepala index.html tulis<base href="https://stackoverflow.com/">
tepat setelah meta tag terakhir .Sekarang dalam perutean Anda js menyuntikkan
$locationProvider
dan menulis$locatonProvider.html5Mode(true);
Sesuatu Seperti Ini: -Untuk Detail lebih lanjut, tonton video ini https://www.youtube.com/watch?v=XsRugDQaGOo
sumber
Kira ini benar-benar terlambat untuk ini. Tetapi menambahkan konfigurasi di bawah ini ke app.module impor berfungsi:
sumber
Langkah 1: Suntikkan layanan $ locationProvider ke dalam konstruktor konfigurasi aplikasi
Langkah 2: Tambahkan baris kode $ locationProvider.html5Mode (true) ke konstruktor konfigurasi aplikasi.
Langkah 3: di halaman wadah (pendaratan, master, atau tata letak), tambahkan tag html seperti
<base href="https://stackoverflow.com/">
di dalam tag.Langkah 4: hapus semua '# "untuk merutekan konfigurasi dari semua tag anchor. Sebagai contoh, href =" # home "menjadi href =" home "; href =" # tentang "menjadi herf =" tentang "; href =" # kontak "menjadi href =" kontak "
sumber
Cukup tambahkan
$locationProvider
Dalamdan kemudian tambahkan
$locationProvider.hashPrefix('');
setelahItu dia.
sumber