2016-01-04 26 views
-1

我不能爲我的生活弄清楚爲什麼控制檯告訴我函數persistSetting()和persistAllSettings()不是函數。TypeError:<>不是函數。難倒

這是一個angularJS控制器。

它是否與函數中的異步方法調用有關?

configApp.controller('settingsController', ['$scope', function($scope) { 
    $scope.toPersist = { 
    discreteValue: 6, 
    qualityCheckBox: false 
    }; 
    $scope.$watchCollection('toPersist', function(newConfigSetting) { 
     this.persistSetting(newConfigSetting); 
     this.persistAllSettings(); 
    }); 
    function persistAllSettings() { 
     chrome.storage.sync.set(toPersist, function() { 
     // notify user? 
     }); 
    } 
    function persistSetting(someSetting) { 
    chrome.storage.sync.set(someSetting, function() { 
     // notify user? 
    }); 
    } 
}]); 
+1

它們可能不是'this'對象的一部分。我看到他們在那裏定義,但他們並不真正成爲任何對象的一部分。你可能不需要'this'。 – MinusFour

+0

就是這樣。謝謝,這讓我瘋狂。 –

回答

0

您有一個名爲persistSettingpersistAllSettings當地的功能,但你試圖調用方法的對象不具有這些名稱的方法命名persistSettingpersistAllSettings。 (這是怎麼樣聲明名爲foo不會突然使它可作爲this.foo變量)。

你很可能需要執行下列操作之一:

  • 變化this.persistSettingthis.persistAllSettingspersistSettingpersistAllSettings,分別。
  • 分別將該對象上的persistSettingpersistAllSettings方法設置爲persistSettingpersistAllSettings函數。
0

不要在作用域中使用this.可見的前綴函數,因爲它用於訪問實例方法。

$scope.$watchCollection('toPersist', function(newConfigSetting) { 
    persistSetting(newConfigSetting); 
    persistAllSettings(); 
});