1

私は次のことをしようとしています:

eventService.emit = function(name, optionalArg1, optionalArg2,... ){
    $rootScope.$broadcast(name, optionalArg1, optionalArg2,...);
};

オプションの引数の数に制限はありません。(ブロードキャスト "定義": $broadcast(string, args...))

と思いました

eventService.emit =$rootScope.$broadcast;

動作しますが、動作しません ($broadcast 関数は $rootscope 属性にアクセスする可能性があります)。

eventService.emit = function(){
    $rootScope.$broadcast(arguments);
};

動作しないようです

助けてくれてありがとう

元のコード:

services.factory('eventService', function($rootScope, $http){
    var eventObject = {};

    eventObject.emit = function(name){

       $rootScope.$broadcast(name);

    };
    return eventObject;
});
4

3 に答える 3

6

あなたは試すことができます

eventService.emit = function(){

    $rootScope.$broadcast.apply($rootScope, arguments); //you can change "this" to whatever you need
};

ここでは、引数「配列」(実際には配列ではありませんが配列のように動作します) 内のパラメーターを使用して $rootScope.$broadcast を実行し、関数内で this (パラメーター) を this として使用しています。

于 2012-08-09T19:54:34.877 に答える
1

あなたは使用することができます(ここapply()のドキュメント):

eventService.emit = function(name, optionalArg1, optionalArg2,... )
{
    $rootScope.$broadcast.apply(this, arguments);
};

[1]:

于 2012-08-09T20:07:23.457 に答える
0

多くのオプションが必要な場合は、次のようにします。

function myFunction(options){
 if( options["whateverOptionYouWant"] != undefined ){
  //TODO: implement whatever option you want
 }
 if( options["whateverOTHEROptionYouWant"] != undefined ){
  //TODO: implement whatever OTHER option you want
 }
}

必要な数のオプションについてなどです。

次のように呼び出します。

myFunction({ whateverOptionYouWant: "some option variable" });
myFunction();
myFunction({ 
 whateverOptionYouWant: "some option variable", 
 whateverOTHEROptionYouWant: "some other variable"});
于 2012-08-09T19:54:42.687 に答える