我广播了一个事件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
我猜还有上下文问题......
答案 0 :(得分:0)
应该是:
app.controller('ctrl', ["$scope","Service",
function($scope,Service){
var vm = this;
vm.loadContent = function(){
Service
.getSection()
.then(function (res) {
$scope.content = res.data.template;
});
}();
$scope.$on('langChange', vm.loadContent);
/* or
function() {
vm.loadContent();
}
*/
}]);