无法从控制器中访问指令变量
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()
方法中,保证到总是在分配绑定后调用。这是编写控制器的可靠方法。仅仅因为您到目前为止一直很幸运,没有理由继续使用不稳定和脆弱的编码方法。
有关详细信息,请参阅
我正在开发一个具有以下指令和控制器的应用程序:
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()
方法中,保证到总是在分配绑定后调用。这是编写控制器的可靠方法。仅仅因为您到目前为止一直很幸运,没有理由继续使用不稳定和脆弱的编码方法。
有关详细信息,请参阅