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.