0
我廣播了一個事件langChange
來完成本地化。 這裏的問題是找到一個優雅的方式來呼籲this.loadContent()
進入該控制器附加的頁面上,當langChange
也被觸發。 那bind(this)
沒有做我想要的東西,我猜。角度上下文綁定
我會避免this
別名解決方案,如var $this=this; [...]
。
app.controller('ctrl', ["$scope","Service",
function($scope,Service){
this.loadContent = (function(){
Service
.getSection()
.then(function (res) {
$scope.content = res.data.template;
});
}());
$scope.$on('langChange', (function(){
this.loadContent();
}).bind(this));
}]);
編輯:基於@Petr Averyanov答案我嘗試了以下解決方案,但loadContent
時langChange
被觸發甚至沒有叫。
app.controller('ctrl', ["$scope","Service",
function($scope,Service){
console.log("loading content..")
var _this = this;
_this.loadContent = function(){
console.log("load")
tutorialService
.getSection()
.then(function (res) {
$scope.content = res.data.template;
});
}();
$scope.$on('langChange', _this.loadContent);
}]);
我也嘗試了一個在他的評論後,我得到_this.loadContent is not a function
我想還是有背景的問題...
我知道了'this'別名解決方案。如果可能的話,我會避免這個解決方案 – alfredopacino
@alfredopacino如果你知道一個可能的解決方案,但選擇不使用該解決方案,那麼你的問題應該更像是「我正在尋找一種不同的方式來解決這個問題」,以避免這種混淆,對於答覆者和其他可能有類似問題但不知道避免的解決方案的人員。 – Claies
我編輯了更多的細節 – alfredopacino