15 ответов:
этот пример с сайта angular documentation просто делает
hrefдаже не назначая его пустой строке:[<a href ng-click="colors.splice($index, 1)">X</a>]
вы можете просто предотвратить поведение по умолчанию для события click напрямую в шаблоне.
<a href="#" ng-click="$event.preventDefault();logout()" />директивы, такие как ngClick и ngFocus, предоставляют объект $event в области этого выражения.
вот еще одно решение :
<a href="" ng-click="logout()">Sign out</a>т. е. просто удалите # из атрибута href
еще один намек. Если вам нужен реальный URL (для поддержки доступности браузера), вы можете сделать следующее:
шаблон:
<a ng-href="{{link}}" ng-click="$event.preventDefault(); linkClicked(link)">{{link}}</a>
В Угловой,
<a>s являются директивы. Как таковой, если у вас есть пустойhrefили нетhref, Angular будет вызыватьevent.preventDefault.С источник:
element.on('click', function(event){ // if we have no href url, then don't navigate anywhere. if (!element.attr(href)) { event.preventDefault(); } });здесь plnkr демонстрируя отсутствует
hrefсценарий.
это работало для меня в IE 9 и AngularJS v1.0. 7:
<a href="javascript:void(0)" ng-click="logout()">Logout</a>спасибо duckeggs' для рабочего раствора!
просто напишите ng-click перед href ..это сработало для меня
<!DOCTYPE html> <html> <head> <script data-require="[email protected]" data-semver="1.5.0" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js"></script> <script> angular.module("module",[]) .controller("controller",function($scope){ $scope.func =function(){ console.log("d"); } })</script> </head> <body ng-app="module" ng-controller="controller"> <h1>Hello ..</h1> <a ng-click="func()" href="someplace.html">Take me there</a> </body> </html>
есть так много ответов на этот вопрос здесь, но, кажется, есть немного путаницы о том, что на самом деле происходит.
во-первых, ваша посылка
" href переопределяет ng-click в Angular.ОАО"
- это неправильно. На самом деле происходит то, что после вашего щелчка событие click сначала обрабатывается angular(определяется
ng-clickдиректива в угловом 1.x иclickв угловой 2.x+) и тогда это продолжает распространяться(что в конечном итоге запускает браузер для перехода к url, определенному с помощью ).(См.этой подробнее о распространении событий в javascript)если вы хотите избежать этого, то вы должны отменить распространения событий с помощью интерфейс событий
preventDefault()метод:<a href="#" ng-click="$event.preventDefault();logout()" />(это чистая функциональность javascript и ничего общего с angular)
теперь это уже решит ваша проблема, но это не оптимальное решение. Угловой, по праву, способствует MVC pattern. С помощью этого решения ваш html-шаблон смешивается с логикой javascript. Вы должны стараться избегать этого как можно больше и поместить свою логику в свой угловой контроллер. Так что лучший способ будет
<a href="#" ng-click="logout($event)" />и в вашем методе выхода из системы:
logout($event) { $event.preventDefault(); ... }теперь событие click не достигнет браузера, поэтому он не будет пытаться загрузить ссылку, на которую указывает
href. (Однако обратите внимание, что если пользователь щелкает правой кнопкой мыши по ссылке и непосредственно открывает ссылку, то события щелчка вообще не будет. Вместо этого он будет напрямую загружать url-адрес, указанный .)что касается комментариев о цвете посещенных ссылок в браузерах. Опять же это не имеет ничего общего с угловым, если ваш
href="..."указывает на посещенный url вашим браузером по умолчанию цвет ссылки будет отличаться. Это контролируется CSS: посетил Селектор, вы можете изменить свой css, чтобы переопределить это поведение:a { color:pink; }PS1:
некоторые ответы предлагают использовать:
<a href .../>
href- это угловой директивы. Когда ваш шаблон обрабатывается angular это будет преобразовано в<a href="" .../>эти два способа по существу одинаковы.
Я не думаю, что вам нужно удалить "#" из href. Следующие работы с Angularjs 1.2.10
<a href="#/" ng-click="logout()">Logout</a>
вы также можете попробовать это:
<div ng-init="myVar = 'www.thesoftdesign'"> <h1>Tutorials</h1> <p>Go to <a ng-href="{{myVar}}">{{myVar}}</a> to learn!</p> </div>
Я добавлю для вас пример, который работает для меня, и вы можете изменить его, как вы хотите.
Я добавляю ниже код внутри моего контроллера.
$scope.showNumberFct = function(){ alert("Work!!!!"); }и для моей страницы просмотра я добавляю ниже код.
<a href="" ng-model="showNumber" ng-click="showNumberFct()" ng-init="showNumber = false" >Click Me!!!</a>
вы пытались перенаправить внутри самой функции выхода из системы? Например, предположим, что ваша функция выхода из системы выглядит следующим образом
$scope.logout = function() { $scope.userSession = undefined; window.location = "http://www.yoursite.com/#" }затем вы можете просто
<a ng-click="logout()">Sign out</a>
пожалуйста, проверьте это
<a href="#" ng-click="logout(event)">Logout</a> $scope.logout = function(event) { event.preventDefault(); alert("working.."); }
//for dynamic elements - if you want it in ng-repeat do below code angular.forEach($scope.data, function(value, key) { //add new value to object value.new_url = "your url"; }); <div ng-repeat="row in data"><a ng-href="{{ row.url_content }}"></a></div>
Comments