Angularjs 如果通过角度控制器动态添加包含指令的元素,如何调用指令?

Angularjs 如果通过角度控制器动态添加包含指令的元素,如何调用指令?,angularjs,angularjs-directive,angularjs-controller,Angularjs,Angularjs Directive,Angularjs Controller,在做了一些搜索之后,我没有在这个糟糕的实践中找到多少信息。假设我有一个这样的控制器(我知道它应该是一个指令,在控制器中我们从来没有做过DOM操作,但我很好奇……) 让我们假设我有一个按钮,可以通过单击触发addElement()。如何“触发”现有autosize指令以实际工作。相反,预先存在并具有autosize指令的输入元素工作正常。我还尝试了$scope.apply(function(){});在创建输入元素的缩进代码周围,它会导致TypeError:undefined不是一个函数://根据

在做了一些搜索之后,我没有在这个糟糕的实践中找到多少信息。假设我有一个这样的控制器(我知道它应该是一个指令,在控制器中我们从来没有做过DOM操作,但我很好奇……)


让我们假设我有一个按钮,可以通过单击触发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);

        }
    }
]);