2015-07-20 48 views
2

我想設置一個函數的上下文並將其作爲回調函數傳遞。爲此我正在這樣做。window.bind()使用AngularJS的類似功能

myController.myService.validateToken(param) 
    .then(myController.myService.getToken.bind(myController.myService)); 

myController.myService.getToken.bind(myController.myService)

但我不知道它是否是正確的做法還是不?

Angular提供的功能與bind()類似嗎?

+0

只是嘗試一下,看看它是否作品。 – dfsq

+0

爲什麼要角實現現有的綁定? – smnbbrv

+0

這是你在找什麼?:https://code.angularjs.org/1.4.1/docs/api/ng/function/angular.bind – Joy

回答

2

請參考angular.bind,這是在AngularJS 1.4.1(1146線)定義爲:

function bind(self, fn) { 
    var curryArgs = arguments.length > 2 ? sliceArgs(arguments, 2) : []; 
    if (isFunction(fn) && !(fn instanceof RegExp)) { 
    return curryArgs.length 
     ? function() { 
      return arguments.length 
      ? fn.apply(self, concat(curryArgs, arguments, 0)) 
      : fn.apply(self, curryArgs); 
     } 
     : function() { 
      return arguments.length 
      ? fn.apply(self, arguments) 
      : fn.call(self); 
     }; 
    } else { 
    // in IE, native methods are not functions so they cannot be bound (note: they don't need to be) 
    return fn; 
    } 
} 

所以使用應該是這樣的:

var context, fn, args; 
angular.bind(context, fn, args); 
+0

我試過了,它對我來說工作得很好。 – Alp

+2

Wha我在我的情況下是 myController.myService.validateToken(param) .then(angular.bind(myController.myService,myController.myService.getToken); – Alp