【问题标题】:Angular: reference currently instantiated controllerAngular:引用当前实例化的控制器
【发布时间】:2014-06-02 04:20:55
【问题描述】:

有没有办法从控制器的定义中获取对当前实例化控制器对象的引用?我想$compile 一个模态并将其绑定到创建模态的同一个控制器。

这是我想做的简化版本,其中THIS_CONTROLLER_INSTANCE 是对我的控制器实例的引用。

angular.module('foo')
.controller('barController', function($scope, $rootScope){
  $scope.openModal = function(){
    var modalEl = $('<div class="modal">Modal stuff here</div>');
    var controller = THIS_CONTROLLER_INSTANCE;
    modalEl.contents().data('$ngControllerController', THIS_CONTROLLER_INSTANCE);

    $compile(modalEl)($scope);
    $('body').append(modalEl);
  }
});

【问题讨论】:

  • 控制器是用ng-controller指令在dom中定义的,所以它不会在$route下,很遗憾
  • 您是否尝试过使用“this”我不确定它是否会起作用,但值得一试。
  • 是的,this 是一个 $scope 对象
  • openModal函数之前的console.log(this)怎么样
  • 其实控制器定义中的this就是实例化的控制器!不知道为什么我以前没有想到这一点。结案。将在上面编辑我的帖子

标签: javascript angularjs controller self-reference lexical-scope


【解决方案1】:

如上所述:

当前控制器是this。所以我的问题的解决方案是:

angular.module('foo')
.controller('barController', function($scope, $rootScope){
  var self = this;
  $scope.openModal = function(){
    var modalEl = $('<div class="modal">Modal stuff here</div>');
    var controller = self;
    modalEl.contents().data('$ngControllerController', controller);

    $compile(modalEl)($scope);
    $('body').append(modalEl);
  }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多