Angular.noop ใช้ทำอะไร


86

ฉันได้ลองค้นหาทุกที่แม้แต่ในเอกสารAngular.orgแต่ไม่พบคำอธิบายโดยละเอียดเกี่ยวกับการใช้งาน มันจะมีประโยชน์อย่างมากถ้ามีใครสามารถอธิบายได้


มันเป็นเพียงฟังก์ชันว่างเปล่าที่ไม่ได้ทำอะไรเลย
doodeec

1
ฉันได้รับมากแล้ว แต่ทำไมเราถึงใช้แบบนี้? "success = ความสำเร็จ || angular.noop;"
รุนแรง

1
ดูเหมือนว่า @lechariotdor จะมีคำตอบที่ดีกว่า ... คุณอาจย้ายการยอมรับของคุณเพื่อให้ผู้เยี่ยมชมหน้านี้ได้รับคำตอบที่ดีที่สุดเร็วขึ้น
sfletche

คำตอบ:


148

angular.noop เป็นฟังก์ชันว่างที่สามารถใช้เป็นตัวยึดเมื่อคุณต้องการส่งผ่านฟังก์ชันบางอย่างเป็นพารามิเตอร์

function foo (callback) {
    // Do a lot of complex things

    callback();
}

// Those two have the same effect, but the later is more elegant
foo(function() {});
foo(angular.noop);

1
ประโยชน์ของการโทรnoopแทนที่จะปล่อยให้ฟังก์ชันว่างคืออะไร? สุนทรียภาพการแสดงหรืออย่างอื่น?
abyrne85

4
@ abyrne85 เป็นที่ชื่นชอบมากขึ้นและเป็นแนวทางปฏิบัติที่ดีในการใช้angular.noopเนื่องจากคุณใช้ฟังก์ชันว่างเดิมซ้ำอยู่เสมอ (แทนที่จะประกาศฟังก์ชันใหม่ที่ไม่ระบุตัวตนทุกครั้ง) ผลการดำเนินงานที่ชาญฉลาดก็จะทำให้แตกต่างเป็นรหัสไม่มีเป็นเพียงฟังก์ชั่นที่ว่างเปล่าชื่อangular.noop noop
tomaoq

การใช้ angular.noop สร้างการมีเพศสัมพันธ์ที่แข็งแกร่งกับวัตถุเชิงมุม ฉันชอบใช้ฟังก์ชันไม่ระบุตัวตนแบบอินไลน์เมื่อจำเป็น
John Smith

ขอบคุณมาก :) คุณอธิบายได้ไหมว่า $ timeout (angular.noop) คืออะไร?
artgb

27

ฉันพบว่ามีประโยชน์อย่างมากเมื่อเขียนฟังก์ชันที่คาดว่าจะมีการโทรกลับ

ตัวอย่าง:

function myFunction(id, value, callback) {

    // some logic
    return callback(someData);
}

ฟังก์ชันด้านบนจะส่งคืนข้อผิดพลาดเมื่อถูกเรียกโดยไม่ระบุอาร์กิวเมนต์ที่สาม myFunction(1, 'a');

ตัวอย่าง (โดยใช้angular.noop):

function myFunction(id, value, callback) {

    var cb = callback || angular.noop; // if no `callback` provided, don't break :)
    // some logic
    return cb(someData);
}

4
หรือคุณมีซับเดียวสำหรับสิ่งนั้น: typeof callback === 'function' && callback();. ดีงามมากขึ้น ^^. ไม่ใช้angular.noopแม้ว่า
Freezystem

16

เป็นฟังก์ชันที่ไม่มีการดำเนินการใด ๆ สิ่งนี้มีประโยชน์ในสถานการณ์เช่นนี้:

function foo(y) {
   var x= fn();
   (y|| angular.noop)(x);
 }

จะมีประโยชน์เมื่อเขียนโค้ดในรูปแบบฟังก์ชัน


2
ตกลง. รับทราบขอบคุณ แต่มีข้อสงสัยเล็กน้อยว่าทำไมเราไม่ทำ "(y) (x)" แทน "(y || angular.noop) (x);"? เหตุผลเบื้องหลังนี้คืออะไร?
รุนแรง

3
@AngularHarsh: - คุณอาจจะเขียนว่า ตัวอย่างนี้อาจช่วยได้: - //do nothing on the success callback, hence replacing the success callbck function with angular.noop() $ scope.contacts = Contacts.query (angular.noop, function (response) {Window.myresp = response; $ scope.displayError (response); console.log ("bad boy, listContacts failed ");});
Rahul Tripathi

ฉันคิดว่าฉันเข้าใจแล้ว ดังนั้นสิ่งที่เรากำลังทำอยู่ที่นี่คือ displayError ถูกกระตุ้นเมื่อเกิดความล้มเหลว แต่ไม่มีอะไรเกิดขึ้นกับความสำเร็จ (ตามที่แนะนำ)
รุนแรง

5

* คำตอบนี้ถือว่าคุณไม่ใช่ผู้เริ่มต้นในเชิงมุม

Angular.noop เป็นฟังก์ชันว่างที่สามารถใช้เป็นตัวยึดได้ในบางกรณี

ตัวอย่างเช่น:

ลองนึกภาพว่าคุณกำลังใช้ q.all ซึ่งทำการเรียกหลายครั้งไปยัง api และส่งคืนคำสัญญาเดียว หากการโทรเหล่านี้บางสายล้มเหลว แต่คุณยังคงต้องจัดการกับสายที่ไม่ล้มเหลวให้ใช้ noop เชิงมุมเป็นตัวเรียกกลับไปยังการโทร api เมื่อคุณรับสาย หากคุณไม่ใช้ noop เชิงมุม q.all จะปฏิเสธทุกสิ่งหากการโทรล้มเหลว

Q.all (somecall.catch (angular.noop), anothercall) จากนั้น (แก้ไขผลลัพธ์ [0] และผลลัพธ์ [1])

หากการโทรล้มเหลว Angular จะเพิกเฉยและทำการโทรอีกครั้ง (แต่คุณจะยังคงไม่ได้กำหนดไว้สำหรับผลลัพธ์ที่แก้ไขครั้งแรก)

ฉันหวังว่าฉันจะช่วย


1
ฉันลงคะแนนเนื่องจากคำตอบของคุณผิดตามหลักไวยากรณ์และผิดอย่างเป็นทางการฉันไม่สามารถรับข้อมูลที่เชื่อถือได้จากคำตอบ
Edoardoo


2

หากคุณต้องการเอกสารเป็นทางการที่นี่คือการเชื่อมโยง มันค่อนข้างเรียบง่าย ฉันได้วางเอกสารปัจจุบันจากลิงค์แล้ว


ฟังก์ชันที่ไม่มีการดำเนินการใด ๆ ฟังก์ชันนี้มีประโยชน์เมื่อเขียนโค้ดในรูปแบบฟังก์ชัน

function foo(callback) {
  var result = calculateResult();
  (callback || angular.noop)(result);
}


0

เคล็ดลับ: คุณสามารถใช้เพื่อเพิ่ม ternary ให้กับng-clickแอตทริบิวต์:

ng-click="(variable) ? doSomething() : angular.noop()"

จนกระทั่งฉันพบว่าคุณสามารถใช้ ng-click = "variable && doSomething ()" `


1
ng-click="(variable) ? doSomething() : true"ก็ใช้ได้เช่นกัน
pwolaq

ng-click = "(ตัวแปร)? doSomething (): ''" ก็ใช้ได้เช่นกัน
joseph oun
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.