2014-12-08 14 views
6

Tôi hiện đang ở số /addDoc và tôi muốn có tuyến đường hiện tại. Đây là bộ điều khiển của tôi:

app.controller('DocRegistrationController',[ '$http', '$scope', '$upload', '$location', function($http, $scope, $upload, $location){ 
$scope.validation=function(){ 
    alert($location.path()); 
} 
    } 

Tuy nhiên, nó sẽ trả về sản phẩm nào. Tôi không muốn mã hóa tất cả các tuyến đường. Tôi đang làm gì sai?

+0

Bạn đang sử dụng '$ routeProvider' ở chế độ html5 (không có url đăng nhập' # ') hay không? – GregL

+0

tôi chưa sử dụng $ routeProvider, tôi muốn điều này để gọi api từ cuộc gọi ajax. – Pravin

+0

Bạn nhận được gì khi bạn thực hiện 'console.dir ($ location)'? – GregL

Trả lời

20

$ dịch vụ vị trí phản hồi url phân tích trong thanh địa chỉ trình duyệt và cung cấp URL cho APP của bạn.

Vì bạn đang sử dụng đường dẫn URL thông thường và phân đoạn tìm kiếm, bạn phải đặt $ locationProvider html5Mode thành true.

$ locationProvider sẽ sử dụng hashbang làm chế độ mặc định.

Nếu bạn không đặt html5Mode thành true, bạn sẽ nhận được chuỗi trống khi bạn cố gắng tìm nạp đường dẫn url.

Sau đó, sử dụng dịch vụ vị trí $ để tìm đường dẫn url sau khi đặt html5Mode.

Và viết quy tắc của riêng bạn để xử lý đường dẫn.

Giả sử rằng URL đầy đủ của bạn trông giống như: http://example.com/person/show/321

Main.js

angular.module("MyAPP",[],function($locationProvider){ 
    $locationProvider.html5Mode(true); 
}); 

function MainController($location){ 
    var pId = $location.path().split("/")[3]||"Unknown"; //path will be /person/show/321/, and array looks like: ["","person","show","321",""] 
    console.log(pId); 
} 

index.html

<!DOCTYPE html> 
<html lang="en" ng-app="MyAPP"> 
    <head> 
     <meta charset="utf-8"> 
     <title>Angular test</title> 
    </head> 
    <body ng-controller="MainController"> 
     <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.6/angular.min.js"></script> 
     <script src="js/main.js"></script> 
    </body> 
</html> 

Hy vọng điều này là hữu ích cho bạn.

+0

nhờ người bạn đời. điều này rất hữu ích. – Pravin

+0

đặt 'html5Mode' thành true đưa ra vấn đề mà tôi không thể tải bất kỳ liên kết nào đến tuyến đường mong muốn, chỉ thay đổi địa chỉ của thanh địa chỉ. Tôi giải quyết vấn đề này với tham chiếu đến câu hỏi [this] (http://stackoverflow.com/questions/19773682/angularjs-a-tag-links-not-working), đặt 'target = '_ self'' trong thẻ anchor. – Pravin

+1

Nếu bạn định cấu hình '$ location' để sử dụng' html5Mode (history.pushState) ', bạn cần chỉ định URL cơ sở cho ứng dụng bằng thẻ' 'hoặc định cấu hình' $ locationProvider' để không yêu cầu một thẻ cơ sở bằng cách truyền một đối tượng định nghĩa với 'requireBase: false' đến' $ locationProvider.html5Mode() '. Hoặc bạn sẽ gặp lỗi 'Lỗi: $ location: nobase' như trong https://docs.angularjs.org/error/$location/nobase – mcy

1

Hãy thử cũng này, đó là mã gốc trong JS. Nó làm việc cho tôi. Nhưng nếu bạn cần phân tích cú pháp url dài với nhiều trang lồng nhau, bạn phải sửa đổi mã một chút.

var path = "/" + window.location.pathname.split('/')[1]; 
    console.log(path 
); 
Các vấn đề liên quan