Angular.noop有什么用?


86

我曾尝试在所有地方搜索它,甚至在Angular.org文档中也找不到,但是在实现中找不到任何详细的解释。如果有什么可以解释的话,那将是非常有帮助的。


它只是一个空函数,什么也不做
doodeec 2014年

1
我已经知道了。但是为什么我们要这样使用它呢?“成功=成功|| angular.noop;”
严苛的2014年

1
看起来@lechariotdor得到了更好的答案...您可以移动您的接受程度,因此此页面的访问者会更快地定向到最佳答案
sfletche

Answers:


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可以与角度对象建立牢固的耦合。我确实更喜欢在必要时使用内联匿名函数。
约翰·史密斯

非常感谢:)您能解释一下什么是$ 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);”?这是什么原因呢?
严苛的2014年

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(“坏男孩,listContacts失败“);});
Rahul Tripathi 2014年

我想我现在明白了。因此,我们在这里执行的操作是在失败时触发displayError,但在成功时未发生任何事情(如建议的那样)。
严苛的2014年

5

*此答案假设您不是初学者

Angular.noop是一个空函数,在某些情况下可以用作占位符

例如:

假设您正在使用q.all,它将对api进行多次调用并返回一个promise。如果其中一些调用失败,但是您仍然需要处理那些未失败的调用,则当您捕获到调用时,请使用angular noop作为api调用的回调。如果您不使用角度锁定,则q.all将在呼叫失败的情况下拒绝所有呼叫。

Q.all(somecall.catch(angular.noop),anothercall).then(解析result [0]和result [1])

如果调用失败,Angular将忽略该调用并执行另一个调用(但是对于第一个已解决的结果,u仍将是未定义的)

我希望我能帮助


1
我之所以投票,是因为您的回答在语法和形式上都是错误的,我实际上无法从中获得任何可靠的信息。
Edoardoo


2

如果您需要官方文档,请点击链接。这很简单。我还从链接粘贴了当前文档。


不执行任何操作的功能。以功能样式编写代码时,此功能很有用。

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


0

技巧:您还可以使用它向ng-click属性添加三元数:

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

直到我发现您可以使用ng-click =“ variable && doSomething()”`


1
ng-click="(variable) ? doSomething() : true"也会起作用
pwolaq

ng-click =“(variable)?doSomething():''”也可以工作
joseph oun
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.