var suggestionElement = document.createElement('div');
vm.suggestActivate = function(keyCode) {
if(keyCode === 32) {
if(vm.summaryData) {
var words = vm.words;
var suggestions = "<div></div>";
var targetElement = event.srcElement;
var targetElementModel = targetElement.getAttribute("ng-model");
for(var i = 0; i < 5; i++) {
$log.debug(targetElementModel);
suggestions += '<div ng-click="vm.appendSuggestion(targetElementModel)" style="padding: 10px; border: 1px solid #B0B0B0;" onMouseOver="this.style.backgroundColor=\'#D8D8D8\'" onMouseLeave="this.style.backgroundColor=\'#F3F3F3\'">' + words[Math.floor(Math.random() * words.length)] + '</div>';
}
suggestionElement.innerHTML = suggestions;
suggestionElement.setAttribute('style', 'background: #F3F3F3; position: relative; top: -3.9em; width: 25%');
suggestionElement.style.display = 'block';
angular.element(targetElement.parentNode).append($compile(suggestionElement)($scope));
}
}
else {
suggestionElement.style.display = 'none';
}
};
vm.appendSuggestion = function(model) {
$log.debug(model);
}
在vm.appendSuggestion
方法的上述代码段中,为什么model
作为未定义返回?如果我在for循环期间记录它,它会返回一个值?我想在vm.appendSuggestion
方法中返回一个值。但是,我注意到它是硬编码的,它不会返回为未定义。
答案 0 :(得分:1)
当您单击已为其分配ngClick指令的div
元素时,Angular会尝试在targetElementModel
上找到$scope
,但它不存在。你不能像那样传递一个值。
解决方案可能是将目标元素列表公开给视图并执行'<div ng-click="vm.appendSuggestion(' + targetElementIndex + ')" ...
之类的操作。但这仅仅是一个例子 - 您可能会找到适合您问题的更合适的解决方案。