2013-12-20 85 views
0

所以我有這個奇怪的問題,其中angular.extend正在評估我的無參數函數。我的userData工廠從我的applicationUserData擴展,但最終的結果是userData工廠中的我的userData對象具有needsTrainingshowWelcomeText的實際值,而不是函數。 setUserData(appbaseUserData)函數仍然作爲一個函數顯示。任何想法爲什麼這是?Angular.extend評估無參數函數

application.factory('applicationUserData', [function(){ 
    var userData; 
    return { 
     setUserData: function(appbaseUserData){ 
      userData = appbaseUserData; 
     }, 
     needsTraining: function(){ 
      userData.ensureUserDataInitialized(); 
      return userData.needsTraining; 
     }, 
     showWelcomeText: function(){ 
      userData.ensureUserDataInitialized(); 
      return userData.showWelcomeText; 
     } 
    } 
}]); 

appBaseModule.factory("userData", ["applicationUserData", function(applicationUserData) { 
    var userData = {}, 
     userDataInitialized = false; 

    userData.init = function(data) { 
     applicationUserData.setUserData(userData); 
     angular.extend(userData, applicationUserData, data); 
     userDataInitialized = true; 
    }; 
.... 
    return userData; 
}]); 
+0

有些東西一定是錯的數據我猜,'angular.extend'在這[jsfiddle](http://jsfiddle.net/bateast/CQwNq/)中表現不錯。 –

回答

1

這可能不是extend這樣做。

Here is the source for that method in GitHub

function extend(dst) { 
    var h = dst.$$hashKey; 
    forEach(arguments, function(obj){ 
    if (obj !== dst) { 
     forEach(obj, function(value, key){ 
     dst[key] = value; 
     }); 
    } 
    }); 

    setHashKey(dst,h); 
    return dst; 
} 

什麼在你調用它的時候是在data?有可能它有一些價值,它會覆蓋你的功能。

無論哪種方式,它不是extend本身。這是一個非常簡單的功能。

+0

使用版本1.2.4;如果我查看注入的applicationUserData它讀取作爲函數,但他們不生存擴展。 –

+1

我已經更新了我的答案。它可能是傳遞給你的'init'函數的'data'中的任何東西。 –

+0

啊,你可能是對的! –