如何动态地将DOM元素(带控制器)添加到AngularJS范围中

时间:2014-02-05 20:58:57

标签: javascript jquery angularjs

我正在尝试构建一个应用程序(使用AngularJS),它允许我拖动一个复杂的HTML元素,该元素可能包含从调色板到div的角度控制器调用。

拖放部分正在工作,但是我无法将元素克隆到范围内。

我有一个JSFiddle在这里演示问题:http://jsfiddle.net/gdharley/h4AcC/

基本上,当元素被删除时,我发出一个由mainController拾取的事件。

$scope.$on('my-created', function (ev, val) {
    $scope.items.splice(val.to, 0, {
        name: val.name
    });
    var myInjector = angular.injector(["ng", "plunker"]);
    var $compile = myInjector.get("$compile"); // retrieve the compile service
    var fnLink = $compile(val); // returns a Link function used to bind element to the scope
    fnLink($scope);
})

然后我从注入器中检索编译服务并将he元素编译到范围中。

虽然没有抛出任何错误,但元素的克隆不起作用(即添加联系人似乎不会调用控制器中的add()函数。

任何帮助表示赞赏。 谢谢。 格雷格

1 个答案:

答案 0 :(得分:0)

不,你不用控制器把东西放在DOM中。你在一个指令中做到了。即便如此,你也不需要这些。只需将“add()”函数添加到模型中,然后使用ng-repeat输出更多内容。

您所做的一切都应该基于改变模型。我很难准确理解你想要实现的目标,但拖放的结果应该修改你的模型,角度可以根据手表或发射做出反应,但你不应该在大多数时间手动编译任何东西。

如果你确实需要在你的指令中编译它,而不是你的控制器。只需注入$compile服务并以这种方式调用它。