Angularjs 如果通过角度控制器动态添加包含指令的元素,如何调用指令?
在做了一些搜索之后,我没有在这个糟糕的实践中找到多少信息。假设我有一个这样的控制器(我知道它应该是一个指令,在控制器中我们从来没有做过DOM操作,但我很好奇……)Angularjs 如果通过角度控制器动态添加包含指令的元素,如何调用指令?,angularjs,angularjs-directive,angularjs-controller,Angularjs,Angularjs Directive,Angularjs Controller,在做了一些搜索之后,我没有在这个糟糕的实践中找到多少信息。假设我有一个这样的控制器(我知道它应该是一个指令,在控制器中我们从来没有做过DOM操作,但我很好奇……) 让我们假设我有一个按钮,可以通过单击触发addElement()。如何“触发”现有autosize指令以实际工作。相反,预先存在并具有autosize指令的输入元素工作正常。我还尝试了$scope.apply(function(){});在创建输入元素的缩进代码周围,它会导致TypeError:undefined不是一个函数://根据
让我们假设我有一个按钮,可以通过单击触发addElement()。如何“触发”现有autosize指令以实际工作。相反,预先存在并具有autosize指令的输入元素工作正常。我还尝试了$scope.apply(function(){});在创建输入元素的缩进代码周围,它会导致TypeError:undefined不是一个函数://根据Mohammad Shahrouri的上述评论,我必须在控制器中注入
$compile
依赖项,并且我必须添加$compile(input)($scope)代码>结尾处:
angular.module('app').controller('test', ['$scope','$compile',
function($scope, $compile) {
$scope.addElement = function() {
var input = document.createElement('input');
input.type = "text";
//contains directive
input.setAttribute("autosize","autosize");
input.setAttribute("ng-model","dummy");
//[ append code ]
input.focus();
$compile(input)($scope);
}
}
]);
您是否尝试过$compile(input)($scope)代码>?哇,很好,谢谢-我不知道有办法通过控制器调用$compile-我正在更新代码
angular.module('app').controller('test', ['$scope','$compile',
function($scope, $compile) {
$scope.addElement = function() {
var input = document.createElement('input');
input.type = "text";
//contains directive
input.setAttribute("autosize","autosize");
input.setAttribute("ng-model","dummy");
//[ append code ]
input.focus();
$compile(input)($scope);
}
}
]);