両方のhref属性とng-click属性が定義されている場合:
<a href="#" ng-click="logout()">Sign out</a>
このhref
属性はng-clickよりも優先されます。
ng-clickの優先度を上げる方法を探しています。
href
Twitter Bootstrapには必須ですが、削除できません。
両方のhref属性とng-click属性が定義されている場合:
<a href="#" ng-click="logout()">Sign out</a>
このhref
属性はng-clickよりも優先されます。
ng-clickの優先度を上げる方法を探しています。
href
Twitter Bootstrapには必須ですが、削除できません。
回答:
URIが必要ない場合は、おそらくボタンタグを使用する必要があります。
Angular Documentation Siteの次の例は、href
空の文字列に割り当てることさえせずに実行しています。
[<a href ng-click="colors.splice($index, 1)">X</a>]
href="#"
)はページのリロードを引き起こしますが、これも誤りです。
href=""
解決します。
<a href="javscript:void(0)" ng-click="logout()">Sign out</a>
もお
テンプレートで直接クリックイベントのデフォルトの動作を直接防ぐことができます。
<a href="#" ng-click="$event.preventDefault();logout()" />
角度のドキュメントごとに、
ngClickやngFocusなどのディレクティブは、その式のスコープ内で$ eventオブジェクトを公開します。
ここに別の解決策があります:
<a href="" ng-click="logout()">Sign out</a>
つまり、href属性から#を削除するだけです
もう1つヒント。(ブラウザーのアクセシビリティーをサポートするために)実際のURLが必要な場合は、以下を実行できます。
テンプレート:
<a ng-href="{{link}}" ng-click="$event.preventDefault(); linkClicked(link)">{{link}}</a>
指令:
$scope.linkClicked = function(link){
// your code here
$location.path(link);
};
このようにして、linkClicked()内のコードは、リンクに移動する前に実行される可能性があります
Angularでは、<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のコメントに感謝します!
この質問に対する回答は非常に多くありますが、実際にここで何が行われているのかについては少し混乱しているようです。
まず、あなたの前提
「hrefはAngular.jsのng-clickをオーバーライドします」
間違っている。実際に起こっていることは、クリック後、クリックイベントが最初にangular(ng-click
角形1.xとclick
角形2.x +のディレクティブによって定義される)によって処理され、その後伝播し続けます(これにより、最終的にブラウザーがトリガーされ、href
属性で定義されたURL )(JavaScriptでのイベント伝播の詳細については、こちらを参照してください)
これを回避したい場合は、EventインターフェースのpreventDefault()
メソッドを使用してイベントの伝播をキャンセルする必要があります。
<a href="#" ng-click="$event.preventDefault();logout()" />
(これは純粋なjavascript機能であり、angularとは関係ありません)
これで既に問題は解決していますが、これは最適な解決策ではありません。Angularは当然ながらMVCパターンを促進します。このソリューションでは、HTMLテンプレートがJavaScriptロジックと混合されます。これをできるだけ避けて、ロジックを角度コントローラーに配置する必要があります。だからより良い方法は
<a href="#" ng-click="logout($event)" />
そして、あなたのlogout()メソッドで:
logout($event) {
$event.preventDefault();
...
}
これでクリックイベントはブラウザに到達しないため、が指すリンクをロードしようとしませんhref
。(ただし、ユーザーがリンクを右クリックして直接リンクを開いた場合、クリックイベントはまったく発生しません。代わりに、href
属性が指すURLが直接読み込まれます。)
ブラウザの訪問済みリンクの色に関するコメントについて。繰り返しますが、これは角度とは関係ありませんhref="..."
。デフォルトでブラウザがアクセスしたURLをポイントしている場合、リンクの色は異なります。これはCSS:visited Selectorによって制御されます。CSSを変更して、この動作をオーバーライドできます。
a {
color:pink;
}
PS1:
いくつかの回答は使用することをお勧めします:
<a href .../>
href
角度指令です。テンプレートがangularで処理されると、これは次のように変換されます
<a href="" .../>
これら2つの方法は基本的に同じです。
hrefの前にng-clickと書いてください。
<!DOCTYPE html>
<html>
<head>
<script data-require="angular.js@1.5.0" 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>
私に役立つ例を追加します。必要に応じて変更できます。
コントローラ内に次のコードを追加します。
$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..");
}
これは私のために働く
<a href (click)="logout()">
<i class="icon-power-off"></i>
Logout
</a>