javascript - 如何动态地将 DOM 元素(带有 Controller )添加到 AngularJS 范围中

标签 javascript jquery angularjs

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

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

我有一个 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);
})

然后我从注入(inject)器检索编译服务并将元素编译到作用域中。

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

感谢任何帮助。

最佳答案

不,你不能用 Controller 将东西放入 DOM 中。您可以在指令中执行此操作。即使那样,你也不需要这些。只需让“add()”函数将内容添加到模型中并使用 ng-repeat 输出更多内容即可。

您所做的一切都应该基于更改模型。我很难准确理解您想要实现的目标,但是拖放的结果应该修改您的模型,并且 Angular 可以根据 watch 或发射使用react,但大多数时候您不应该手动编译任何内容.

如果您确实需要编译,请在指令中进行编译,而不是在 Controller 中进行。只需注入(inject) $compile 服务并以这种方式调用它即可。

关于javascript - 如何动态地将 DOM 元素(带有 Controller )添加到 AngularJS 范围中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21588375/

相关文章:

javascript - 弹出窗口不在屏幕中心 - CSS 问题

php - WordPress 插件 - 如何禁用每页 js/css

c# - 将对象从一个 Aspx 从 Javascript 传递到另一个

javascript - Tron 游戏关键事件问题

javascript - 如何使用 angular-google-maps <markers> 指令?

javascript - Angular ng-repeat 有效...但没有绑定(bind)/显示任何值(Twig)

jquery - session 超时插件

javascript - 如何修复此 Angular JS 错误 : [$injector:unpr]?

javascript - 更改图像 onLoad() - 我的失败在哪里?

javascript - 从 Twilio 响应外部 IVT