角度中的上下文绑定

时间:2017-03-02 17:39:19

标签: javascript angularjs

我广播了一个事件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我猜还有上下文问题......

1 个答案:

答案 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();
           }
        */
}]);