我正在尝试构建一个应用程序(使用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()函数。
任何帮助表示赞赏。 谢谢。 格雷格
答案 0 :(得分:0)
不,你不用控制器把东西放在DOM中。你在一个指令中做到了。即便如此,你也不需要这些。只需将“add()”函数添加到模型中,然后使用ng-repeat输出更多内容。
您所做的一切都应该基于改变模型。我很难准确理解你想要实现的目标,但拖放的结果应该修改你的模型,角度可以根据手表或发射做出反应,但你不应该在大多数时间手动编译任何东西。
如果你确实需要在你的指令中编译它,而不是你的控制器。只需注入$compile
服务并以这种方式调用它。