Angular JS: Как/когда использовать ng-click для вызова маршрута?
Предположим, вы используете маршруты:
// bootstrap
myApp.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {
$routeProvider.when('/home', {
templateUrl: 'partials/home.html',
controller: 'HomeCtrl'
});
$routeProvider.when('/about', {
templateUrl: 'partials/about.html',
controller: 'AboutCtrl'
});
...
И в вашем html, вы хотите перейти к странице о том, когда нажата кнопка. Один из способов -
<a href="#/about">
... но, похоже, ng-click будет полезен и здесь.
- Правильно ли это предположение? Использовать ng-click вместо привязки?
- Если да, то как это будет работать? IE:
<div ng-click="/about">
Ответы
Ответ 1
Маршруты контролируют службу $location
и реагируют на изменения в URL (обычно через хеш). Чтобы "активировать" маршрут, вы просто меняете URL-адрес. Самый простой способ сделать это - привязать теги.
<a href="#/home">Go Home</a>
<a href="#/about">Go to About</a>
Ничего сложнее. Если, однако, вы должны сделать это из кода, правильным способом является использование службы $location
:
$scope.go = function ( path ) {
$location.path( path );
};
Например, кнопка может запускаться:
<button ng-click="go('/home')"></button>
Ответ 2
Вот отличный совет, о котором никто не упоминал. В контроллере, который находится внутри функции, вам необходимо указать поставщика местоположения:
app.controller('SlideController', ['$scope', '$location',function($scope, $location){
$scope.goNext = function (hash) {
$location.path(hash);
}
;]);
<!--the code to call it from within the partial:---> <div ng-click='goNext("/page2")'>next page</div>
Ответ 3
Использование настраиваемого атрибута (реализуемого с помощью директивы), пожалуй, является самым чистым способом. Здесь моя версия, основанная на предложениях @Josh и @sean.
angular.module('mymodule', [])
// Click to navigate
// similar to <a href="#/partial"> but hash is not required,
// e.g. <div click-link="/partial">
.directive('clickLink', ['$location', function($location) {
return {
link: function(scope, element, attrs) {
element.on('click', function() {
scope.$apply(function() {
$location.path(attrs.clickLink);
});
});
}
}
}]);
У него есть некоторые полезные функции, но я новичок в Angular, поэтому есть возможности для улучшения.
Ответ 4
Помните, что если вы используете ng-click для маршрутизации, вы не сможете щелкнуть правой кнопкой мыши элемент и выбрать "открыть в новой вкладке" или ctrl, щелкнув ссылку. Я пытаюсь использовать ng-href, когда приходит в навигацию. ng-click лучше использовать на кнопках для операций или визуальных эффектов, таких как сбой.
Но Около
Я бы не рекомендовал. Если вы измените маршрут, вам может потребоваться изменить много места в приложении. Попросите метод вернуть ссылку. например:
Около. Этот метод, который вы размещаете в утилите
Ответ 5
Вы можете использовать:
<a ng-href="#/about">About</a>
Если вам нужна динамическая переменная внутри href, вы можете сделать так:
<a ng-href="{{link + 123}}">Link to 123</a>
Где ссылка - переменная области Angular.