2012-08-09 48 views
1

我嘗試做以下可選參數:JavaScript的伎倆

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

不限數量的可選參數。 (播出的 「定義」:$廣播(字符串,ARGS ...))

我想

eventService.emit =$rootScope.$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; 
}); 
+0

你可以使用'typeof'運營商,看看變量定義爲 – starbeamrainbowlabs 2012-08-09 19:54:36

+0

eventService.emit = function(){ $ rootScope。$ broadcast(Array.prototype.slice.call(arguments)); }; 似乎不起作用,$廣播拋出的事件永遠不會被捕獲 – cricardol 2012-08-09 20:18:08

回答

6

你可以嘗試

eventService.emit = function(){ 

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

這裏你正在執行$ rootScope $與參數「數組」的參數播出。(這是不是一個真正的數組,但行爲像一個),並使用該(參數)如此在函數中。

+0

可能更好的是通過'$ rootScope'而不是'this'。這更像是問題的要求 - 儘管在實踐中可能也可能不重要。 – 2012-08-09 20:11:50

+0

是的,它可能是正確的,我真的不知道什麼會更好地適應這種情況,因此評論:)。 – NicoSantangelo 2012-08-09 20:13:12

+1

正在使用$ rootscope而不是'this'... thx guys – cricardol 2012-08-09 21:06:39

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"}); 
+0

這不是我真正想到的解決方案,我想使用「arguments」對象,它是「A king of」數組(http:///javascriptweblog.wordpress.com/2011/01/18/javascripts-arguments-object-and-beyond/) – cricardol 2012-08-09 20:13:26

1

你可以使用apply()(文檔here):

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

[1]:

+0

第一個參數的目的是什麼? – cricardol 2012-08-09 20:52:58

+0

它似乎是一個有效的解決方案(當我看着文檔),但我不能讓它工作....我也嘗試過這個函數:'call':https://developer.mozilla.org/en-美國/文檔/ JavaScript的/參考/ Global_Objects /功能/通話 – cricardol 2012-08-09 20:55:31

相關問題