在ng-compile上传递变量返回undefined

时间:2017-05-12 07:38:36

标签: angularjs

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方法中返回一个值。但是,我注意到它是硬编码的,它不会返回为未定义。

1 个答案:

答案 0 :(得分:1)

当您单击已为其分配ngClick指令的div元素时,Angular会尝试在targetElementModel上找到$scope,但它不存在。你不能像那样传递一个值。

解决方案可能是将目标元素列表公开给视图并执行'<div ng-click="vm.appendSuggestion(' + targetElementIndex + ')" ...之类的操作。但这仅仅是一个例子 - 您可能会找到适合您问题的更合适的解决方案。