Изходен код на HTML
<div ng-app="">
<div ng-controller="test">
<div ng-address-bar browser="html5"></div>
<br><br>
$location.url() = {{$location.url()}}<br>
$location.search() = {{$location.search('keyword')}}<br>
$location.hash() = {{$location.hash()}}<br>
keyword valus is={{loc}} and ={{loc1}}
</div>
</div>
Изходен код на AngularJS
<script>
function test($scope, $location) {
$scope.$location = $location;
$scope.ur = $scope.$location.url('www.html.com/x.html?keyword=test#/x/u');
$scope.loc1 = $scope.$location.search().keyword ;
if($location.url().indexOf('keyword') > -1){
$scope.loc= $location.url().split('=')[1];
$scope.loc = $scope.loc.split("#")[0]
}
}
</script>
Тук променливите loc
и loc1
връщат test като резултат за горния URL адрес. Това ли е правилният начин?
Знам, че това е стар въпрос, но ми отне известно време да го разбера, като се има предвид оскъдната документация на Angular. RouteProvider и routeParams е правилният начин. Маршрутът свързва URL адреса с вашия контролер/изглед, а routeParams могат да бъдат предадени в контролера.
Разгледайте проекта Angular seed. В app.js ще намерите пример за доставчик на маршрути. За да използвате параметри, просто ги добавете по следния начин:
$routeProvider.when('/view1/:param1/:param2', {
templateUrl: 'partials/partial1.html',
controller: 'MyCtrl1'
});
След това в контролера си инжектирайте $routeParams:
.controller('MyCtrl1', ['$scope','$routeParams', function($scope, $routeParams) {
var param1 = $routeParams.param1;
var param2 = $routeParams.param2;
...
}]);
При този подход можете да използвате параметри с url, като например: "http://www.example.com/view1/param1/param2"
Макар че маршрутизацията наистина е добро решение за анализ на URL на ниво приложение, може да искате да използвате услугата $location
на по-ниско ниво, инжектирана във ваша собствена услуга или контролер:
var paramValue = $location.search().myParam;
Този прост синтаксис ще работи за http://example.com/path?myParam=paramValue
. Но само ако преди това сте конфигурирали $locationProvider
в режим HTML 5:
$locationProvider.html5Mode(true);
В противен случай разгледайте синтаксиса http://example.com/#!/path?myParam=someValue "Hashbang", който е малко по-сложен, но има предимството, че работи и на стари браузъри (несъвместими с HTML 5).
Ако използвате ngRoute, можете да инжектирате $routeParams
в контролера си
http://docs.angularjs.org/api/ngRoute/service/$routeParams
Ако'използвате angular-ui-router, можете да инжектирате $stateParams