Angular.noop được sử dụng để làm gì?


86

Tôi đã thử tìm kiếm nó ở khắp mọi nơi ngay cả trên tài liệu Angular.org nhưng không thể tìm thấy bất kỳ giải thích chi tiết nào về cách triển khai. Nó sẽ rất hữu ích nếu bất kỳ ai có thể giải thích nó.


nó chỉ là một chức năng có sản phẩm nào mà không làm gì
doodeec

1
Tôi đã có bấy nhiêu. Nhưng tại sao chúng ta lại sử dụng nó như thế này? "success = thành công || angle.noop;"
Khắc nghiệt

1
trông giống như @lechariotdor đã có câu trả lời tốt hơn ... bạn có thể di chuyển chấp nhận của bạn để truy cập tới trang này được nhanh hơn dẫn đến câu trả lời tốt nhất
sfletche

Câu trả lời:


148

angle.noop là một hàm trống có thể được sử dụng làm trình giữ chỗ khi bạn cần chuyển một số hàm dưới dạng tham số.

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
Lợi ích của việc gọi noopthay vì chỉ để trống hàm là gì? Tính thẩm mỹ, hiệu suất hay thứ gì khác?
abyrne85

4
@ abyrne85 Nó đẹp hơn về mặt thẩm mỹ và một cách sử dụng tốt angular.nooplà bạn luôn sử dụng lại cùng một hàm trống (thay vì khai báo một hàm ẩn danh mới). Về mặt hiệu suất, nó không có gì khác biệt vì mã của angular.noopchỉ là một hàm trống có tên noop.
tomaoq

Sử dụng angle.noop tạo ra một khớp nối mạnh với đối tượng góc cạnh. Tôi thích sử dụng chức năng ẩn danh nội tuyến khi cần thiết.
John Smith

Cảm ơn bạn rất nhiều :) Bạn có thể giải thích $ timeout (angle.noop) là gì không?
artgb

27

Tôi thấy nó cực kỳ hữu ích khi viết một hàm mong đợi một cuộc gọi lại.

Thí dụ:

function myFunction(id, value, callback) {

    // some logic
    return callback(someData);
}

Hàm trên sẽ trả về một lỗi, khi nó được gọi mà không chỉ định đối số thứ ba. myFunction(1, 'a');

Ví dụ (sử dụng 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
Hoặc bạn có một lớp lót cho rằng: typeof callback === 'function' && callback();. Cách đẳng cấp hơn ^^. Không sử dụng angular.noopmặc dù.
Freezystem

16

Nó là một chức năng không thực hiện hoạt động nào. Điều này rất hữu ích trong tình huống như thế này:

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

Nó rất hữu ích khi viết mã theo kiểu hàm


2
Đồng ý. Được rồi, cảm ơn. Nhưng chỉ cần một câu hỏi nhỏ rằng tại sao chúng ta không thể thực hiện đơn giản "(y) (x)" thay vì "(y || angle.noop) (x);"? lý do đằng sau này là gì?
Khắc nghiệt

3
@AngularHarsh: - Bạn có thể viết như vậy. Có thể ví dụ này sẽ hữu ích: - //do nothing on the success callback, hence replacing the success callbck function with angular.noop() $ scope.contacts = Contacts.query (angle.noop, function (response) {Window.myresp = response; $ scope.displayError (response); console.log ("bad boy, listContacts fail ");});
Rahul Tripathi

Tôi nghĩ rằng tôi đã hiểu nó ngay bây giờ. Vì vậy, những gì chúng tôi đang làm ở đây là displayError được kích hoạt khi thất bại nhưng không có gì xảy ra khi thành công (như được đề xuất).
Khắc nghiệt

5

* câu trả lời này giả định rằng bạn không phải là người mới bắt đầu về góc cạnh

Angular.noop là một hàm trống có thể được sử dụng làm trình giữ chỗ trong một số trường hợp

ví dụ:

Hãy tưởng tượng bạn đang sử dụng q.all thực hiện nhiều cuộc gọi đến api và trả về một lời hứa. Nếu một số cuộc gọi này không thành công nhưng bạn vẫn cần xử lý những cuộc gọi không thành công, hãy sử dụng angle noop làm lệnh gọi lại api khi bạn bắt được cuộc gọi. Nếu bạn không sử dụng angle noop, q.all sẽ từ chối mọi thứ nếu một cuộc gọi không thành công.

Q.all (somecall.catch (angle.noop), anothercall) .then (giải quyết kết quả [0] và kết quả [1])

Nếu một cuộc gọi không thành công, Angular sẽ bỏ qua điều đó và thực hiện một cuộc gọi khác (nhưng u vẫn sẽ không được xác định cho kết quả được giải quyết đầu tiên)

Tôi hy vọng rằng tôi đã giúp


1
Tôi đã phản đối vì câu trả lời của bạn quá sai ngữ pháp và hình thức, tôi thực sự không thể nhận được bất kỳ thông tin đáng tin cậy nào từ nó.
Edoardoo

4
var result = (callback || angular.noop)(params)

Đó là cách ngắn nhất để làm

var result = typeof callback === 'function' && callback(params);

Có tính đến rằng callback var sẽ là một hàm


cái này thật thanh lịch
Faiz Mohamed Haneef

2

Nếu bạn muốn tài liệu chính thức ở đây là liên kết . Nó khá đơn giản. Tôi cũng đã dán tài liệu hiện tại từ liên kết.


Một chức năng không thực hiện hoạt động nào. Hàm này có thể hữu ích khi viết mã theo kiểu hàm.

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


0

Thủ thuật: Bạn cũng có thể sử dụng nó để thêm một con ba ba vào một ng-clickthuộc tính:

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

Cho đến khi tôi phát hiện ra bạn có thể sử dụng ng-click = "variable && doSomething ()" `


1
ng-click="(variable) ? doSomething() : true"cũng sẽ hoạt động
pwolaq

ng-click = "(biến)? doSomething (): ''" cũng sẽ hoạt động
joseph ounce
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.