[英]AngularJS: Cannot read property '' of undefined
我想在AngularJS中做類似的事情:
.factory('TranslationService', function($location, $rootScope, $routeParams, $translate, $window, tmhDynamicLocale,
LocationService, MetaService) {
return {
translate: function(language, translateUrlName) {
$translate.uses(language).then(function() {
this.translateUrl(language, translateUrlName);
});
},
translateUrl: function(language, translateUrlName) {
// do whatever
}
};
})
但我不知道為什么我收到這個錯誤:
TypeError: Cannot read property 'translateUrl' of undefined
at services.js:1117
at deferred.promise.then.wrappedCallback (angular.js:6846)
at angular.js:6883
at Object.$get.Scope.$eval (angular.js:8057)
at Object.$get.Scope.$digest (angular.js:7922)
at Object.$get.Scope.$apply (angular.js:8143)
at done (angular.js:9170)
at completeRequest (angular.js:9333)
at XMLHttpRequest.xhr.onreadystatechange (angular.js:9303)angular.js:5754 (anonymous function)angular.js:4846 $getangular.js:6848 deferred.promise.then.wrappedCallbackangular.js:6883 (anonymous function)angular.js:8057 $get.Scope.$evalangular.js:7922 $get.Scope.$digestangular.js:8143 $get.Scope.$applyangular.js:9170 doneangular.js:9333 completeRequestangular.js:9303 xhr.onreadystatechange
如果我只是調用this.translateUrl(language, translateUrlName);
translate: function(language, translateUrlName) {
之外translate: function(language, translateUrlName) {
然后它有效,但我沒有得到正確的行為。
帶有閉包的標准陷阱, this
在Javascript中。 做:
return {
translate: function(language, translateUrlName) {
var self = this;
$translate.uses(language).then(function() {
self.translateUrl(language, translateUrlName);
});
},
translateUrl: function(language, translateUrlName) {
// do whatever
}
};
})
將代碼更改為
.factory('TranslationService', function($location, $rootScope, $routeParams,
$translate, $window, tmhDynamicLocale, LocationService, MetaService) {
function translateUrl(language, translateUrlName) {
// do whatever
}
function translate(language, translateUrlName) {
$translate.uses(language).then(function() {
translateUrl(language, translateUrlName);
});
}
return {
translate: translate,
translateUrl: translateUrl
};
})
最好使用命名函數,因為它們有助於調試...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.