Angular.noop ne için kullanılır?


86

Angular.org belgelerinde bile her yerde aramayı denedim, ancak uygulama ile ilgili ayrıntılı bir açıklama bulamadım. Herhangi biri bunu açıklayabilirse çok yardımcı olur.


hiçbir şey yapmayan boş bir işlev
doodeec

1
Zaten o kadarı var. Ama neden böyle kullanıyoruz? "başarı = başarı || angular.noop;"
Sert

1
Görünüşe göre @lechariotdor daha iyi bir cevaba sahip ... kabulünüzü değiştirerek bu sayfaya gelen ziyaretçilerin en iyi yanıta daha hızlı yönlendirilmesini
sağlayabilirsiniz

Yanıtlar:


148

angular.noop, bazı işlevleri bir param olarak geçirmeniz gerektiğinde yer tutucu olarak kullanılabilen boş bir işlevdir.

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İşlevi boş bırakmaktansa aramanın faydası nedir ? Estetik, performans veya başka bir şey?
abyrne85

4
@ abyrne85 angular.noopAynı boş işlevi her zaman yeniden kullandığınız için (her seferinde yeni bir anonim işlev bildirmek yerine) kullanmak daha estetik ve iyi bir uygulamadır . Performans açısından hiçbir fark yaratmaz, çünkü kodu angular.noopsadece adlandırılmış boş bir işlevdir noop.
tomaoq

Angular.noop'u kullanmak, açısal nesneyle güçlü bir bağlantı oluşturur. Gerektiğinde satır içi anonim işlevi kullanmayı tercih ederim.
John Smith

Çok teşekkürler :) $ timeout (angular.noop) nedir açıklayabilir misiniz?
artgb

27

Geri arama bekleyen bir işlev yazarken bunu son derece yararlı buluyorum.

Misal:

function myFunction(id, value, callback) {

    // some logic
    return callback(someData);
}

Yukarıdaki işlev, üçüncü bağımsız değişkeni belirtmeden çağrıldığında bir hata döndürür. myFunction(1, 'a');

Örnek (kullanarak 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
Yoksa bunun için bir tek astar vardır: typeof callback === 'function' && callback();. Çok daha şık ^^. angular.noopYine de kullanmıyorum .
Freezystem

16

Hiçbir işlem yapmayan bir işlevdir. Bu, aşağıdaki gibi durumlarda kullanışlıdır:

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

İşlevsel tarzda kod yazarken kullanışlıdır


2
Tamam. Anladım, teşekkürler. Ama neden "(y || angular.noop) (x);" yerine "(y) (x)" yapamıyoruz? Bunun arkasındaki sebep nedir?
Sert

3
@AngularHarsh: - Bunu yazabilirsin. Bu örnek yardımcı olabilir: - //do nothing on the success callback, hence replacing the success callbck function with angular.noop() $ kapsam.contacts = Kişiler.query (angular.noop, işlev (yanıt) {Window.myresp = response; $ kapsam.displayError (response); console.log ("kötü çocuk, listContacts başarısız ");});
Rahul Tripathi

Sanırım şimdi anladım. Yani burada yaptığımız şey displayError başarısızlık durumunda tetikleniyor, ancak başarı durumunda hiçbir şey olmuyor (önerildiği gibi).
Sert

5

* bu cevap, sizin açısal olarak başlangıç ​​yapmadığınızı varsayar

Angular.noop, bazı durumlarda yer tutucu olarak kullanılabilen boş bir işlevdir

Örneğin:

API'ye birden çok çağrı yapan ve bir söz veren q.all kullandığınızı hayal edin. Bu aramalardan bazıları başarısız olursa, ancak yine de başarısız olmayanları halletmeniz gerekiyorsa, aramaları yakaladığınızda api aramalarına geri arama olarak açısal noop kullanın. Açısal noop kullanmazsanız, q.all bir arama başarısız olursa her şeyi reddeder.

Q.all (somecall.catch (angular.noop), başka bir çağrı). Sonra (sonucu [0] ve sonucu [1] çözümleyin)

Bir arama başarısız olursa, Angular bunu yok sayar ve başka bir arama gerçekleştirir (ancak u yine de ilk çözümlenen sonuç için tanımsız olacaktır)

Umarım yardım etmişimdir


1
Olumsuz oy verdim çünkü cevabınız dilbilgisi ve resmi olarak çok yanlış, ondan gerçekten güvenilir bir bilgi alamadım.
Edoardoo

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

Yapmanın en kısa yolu

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

Geri arama varlığının bir işlev olacağını dikkate alarak



2

Resmi belgeler istiyorsanız, bağlantı burada . Oldukça basit. Mevcut belgeleri de bağlantıdan yapıştırdım.


Hiçbir işlem yapmayan bir işlev. Bu işlev, işlevsel stilde kod yazarken yararlı olabilir.

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


0

Püf noktası: Bir ng-clicközelliğe bir üçlü eklemek için de kullanabilirsiniz :

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

Ng-click = "variable && doSomething ()" kullanabileceğinizi öğrenene kadar


1
ng-click="(variable) ? doSomething() : true"aynı zamanda
çalışırdı

ng-click = "(değişken)? doSomething (): ''" de işe
yarar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.