无法从控制器中访问指令变量

Not able to access directive variable from within controller

我正在开发一个具有以下指令和控制器的应用程序:

function directive() {
  return {
    restrict: 'E',
    template: template,
    controller: 'MessageChatAppController',
    controllerAs: 'vm',
    scope: {},
    bindToController: {
      recipient: '=?'
    }
  };
}

function Controller(MessageChatAppService, UserFactory, $scope) {
  let vm = this;

  console.log(vm);
  console.log(vm.recipient);
  console.log($scope)

  vm.message = '';

  vm.sendMessage = _sendMessage;

  function _sendMessage() {
    MessageChatAppService.sendMessage(vm.message, UserFactory.model.email);
  }

  function _connectUser() {
    MessageChatAppService.connectUser(UserFactory.model.email);
  }

  _connectUser();
}

当执行以下命令时:

console.log(vm);
console.log(vm.recipient);
console.log($scope)

它returns: https://drive.google.com/file/d/1UtWI5WKydF-Hdus_Kilj-A1DxAAG4duz/view?usp=sharing

如您所见,收件人对象有数据,但我当然无法使用 vm.recipient 访问,因为它归控制器所有。在互联网上搜索我发现问题是由于控制器初始化延迟造成的,解决这个问题的方法是使用 $onInit,但是因为我从来不需要 $onInit 来让控制器访问指令变量,所以我不需要想使用它。有没有其他方法可以让它发挥作用?

依赖于存在的绑定的初始化逻辑应该放在控制器的$onInit()方法中,保证到总是在分配绑定后调用。这是编写控制器的可靠方法。仅仅因为您到目前为止一直很幸运,没有理由继续使用不稳定和脆弱的编码方法。

有关详细信息,请参阅