เมื่อมีการกำหนดแอตทริบิวต์ href และ ng-click:
<a href="#" ng-click="logout()">Sign out</a>
href
แอตทริบิวต์จะเหนือกว่างะคลิก
ฉันกำลังมองหาวิธีเพิ่มลำดับความสำคัญของ ng-click
href
จำเป็นสำหรับ Twitter Bootstrap ฉันไม่สามารถลบออกได้
เมื่อมีการกำหนดแอตทริบิวต์ href และ ng-click:
<a href="#" ng-click="logout()">Sign out</a>
href
แอตทริบิวต์จะเหนือกว่างะคลิก
ฉันกำลังมองหาวิธีเพิ่มลำดับความสำคัญของ ng-click
href
จำเป็นสำหรับ Twitter Bootstrap ฉันไม่สามารถลบออกได้
คำตอบ:
คุณควรใช้แท็กปุ่มถ้าคุณไม่ต้องการอูริ
ตัวอย่างนี้จากไซต์เอกสารเชิงมุมทำได้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 แสดงวัตถุ $ เหตุการณ์ภายในขอบเขตของนิพจน์นั้น
นี่คือวิธีแก้ปัญหาอื่น:
<a href="" ng-click="logout()">Sign out</a>
กล่าวคือเพียงแค่ลบ # ออกจากแอตทริบิวต์ href
เพียงคำใบ้เพิ่มเติม หากคุณต้องการ URL จริง (เพื่อรองรับการเข้าถึงเบราว์เซอร์) คุณสามารถทำสิ่งต่อไปนี้:
แม่แบบ:
<a ng-href="{{link}}" ng-click="$event.preventDefault(); linkClicked(link)">{{link}}</a>
สั่ง:
$scope.linkClicked = function(link){
// your code here
$location.path(link);
};
ด้วยวิธีนี้โค้ดของคุณใน linkClicked () จะมีโอกาสดำเนินการก่อนที่จะไปที่ลิงค์
ในเชิงมุม<a>
s มีคำสั่ง เช่นถ้าคุณมีที่ว่างเปล่าhref
หรือไม่href
, 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 แทนที่ ng-click ใน Angular.js"
มันผิด. สิ่งที่เกิดขึ้นจริงคือหลังจากการคลิกของคุณเหตุการณ์การคลิกจะถูกจัดการโดยเชิงมุมก่อน (กำหนดโดยng-click
คำสั่งในเชิงมุม 1.x และclick
ในเชิงมุม 2.x +) จากนั้นมันจะแพร่กระจายต่อไป (ซึ่งในที่สุดจะเรียกเบราว์เซอร์ให้ไปที่ url กำหนดด้วยhref
แอตทริบิวต์) (ดูสิ่งนี้สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการขยายพันธุ์เหตุการณ์ใน JavaScript)
หากคุณต้องการหลีกเลี่ยงสิ่งนี้คุณควรยกเลิกการเผยแพร่เหตุการณ์โดยใช้วิธีการของอินเทอร์เฟซของเหตุการณ์preventDefault()
:
<a href="#" ng-click="$event.preventDefault();logout()" />
(นี่คือฟังก์ชั่นจาวาสคริปต์ล้วนๆและไม่เกี่ยวข้องกับเชิงมุม)
ตอนนี้สิ่งนี้จะช่วยแก้ปัญหาของคุณได้แล้ว แต่นี่ไม่ใช่ทางออกที่ดีที่สุด เชิงมุมชอบธรรมส่งเสริมรูปแบบ MVC ด้วยโซลูชันนี้เทมเพลต html ของคุณจะผสมกับตรรกะของจาวาสคริปต์ คุณควรพยายามหลีกเลี่ยงสิ่งนี้ให้มากที่สุดและใส่ตรรกะของคุณลงในตัวควบคุมเชิงมุมของคุณ ดังนั้นวิธีที่ดีกว่าก็คือ
<a href="#" ng-click="logout($event)" />
และในวิธีการ logout () ของคุณ:
logout($event) {
$event.preventDefault();
...
}
href
ตอนนี้เหตุการณ์คลิกจะไม่สามารถเข้าถึงเบราว์เซอร์จึงจะไม่พยายามที่จะโหลดลิงค์ชี้ (อย่างไรก็ตามโปรดทราบว่าหากผู้ใช้คลิกขวาที่ลิงก์และเปิดลิงก์โดยตรงจะไม่มีเหตุการณ์การคลิกเลย แต่จะโหลด url ที่href
แอตทริบิวต์ชี้โดยตรงแทน)
เกี่ยวกับความคิดเห็นเกี่ยวกับสีของลิงก์ที่เยี่ยมชมในเบราว์เซอร์ อีกครั้งสิ่งนี้ไม่เกี่ยวข้องกับเชิงมุมหากคุณhref="..."
ชี้ไปที่ URL ที่เข้าชมโดยเบราว์เซอร์ของคุณโดยค่าเริ่มต้นสีของลิงก์จะแตกต่างกัน สิ่งนี้ควบคุมโดยCSS: ตัวเลือกที่เข้าชมคุณสามารถแก้ไข css ของคุณเพื่อลบล้างพฤติกรรมนี้:
a {
color:pink;
}
PS1 :
บางคำตอบแนะนำให้ใช้:
<a href .../>
href
เป็นคำสั่งเชิงมุม เมื่อแม่แบบของคุณถูกประมวลผลโดยเชิงมุมสิ่งนี้จะถูกแปลงเป็น
<a href="" .../>
สองวิธีนั้นเหมือนกันเป็นหลัก
เพียงแค่เขียน ng-click ก่อน href .. มันได้ผลสำหรับฉัน
<!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>
ฉันไม่คิดว่าคุณจะต้องลบ "#" ออกจาก 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>
สิ่งนี้ใช้ได้กับฉัน
<a href (click)="logout()">
<i class="icon-power-off"></i>
Logout
</a>