javascript - AngularJS:从列表中动态添加组件

标签 javascript angularjs user-interface components

所以我正在开发一个允许用户修改模板的项目。基本模板将由组件组成,用户将能够添加或删除组件。我在网上找到了一些东西——比如 grapeJS,但对于这个简单的应用程序来说,它太过紧张了。

正在寻找解决此问题的建议或任何有帮助的资源。

这是一个基本的例子。

基本模板将由这些组件组成

  • 标题
  • 文字发布
  • 单张图片
  • 页脚

用户可以选择添加到模板的组件列表可能包括..

  • 图片幻灯片
  • 视频
  • 2 列文本发布
  • Miley Cyrus 的 Wrecking Ball 自动 wav 文件播放器

用户将能够从上面的列表中进行选择并附加到上面的模板列表中。

让我朝着正确的方向前进的任何想法或意见都会有所帮助!

最佳答案

这应该让您朝着正确的方向前进:

  • 将您的图片幻灯片、视频、2 栏文本帖子和 Miley Cyrus 视频创建为独立运行的 AngularJS 组件或指令。
  • 在您要动态加载上面创建的组件/指令的指令/组件中,使用$compile 编译您的组件。然后,使用 $element 将编译后的元素添加到 DOM。

我已经为此创建了一个准系统实现,其中 myTemplate 代表包含应用程序主模板的模板。指令 slideshow 表示当用户单击 Add Component 时动态添加到页面的图像幻灯片。

HTML

<div>
  <my-template></my-template>
</div>

JavaScript

var myApp = angular.module('myApp',[]);

myApp.directive('myTemplate', function($rootScope, $compile) {
    return {
    controller: function($element, $scope) {
        var vm = this;
        vm.name = "name";

      vm.insert = function() {
        var elStr = "<slideshow></slideshow>";
        var newScope = $rootScope.$new();
        var insertedEl = $compile(elStr)(newScope);
        $element.append(insertedEl);
      };
    },
    controllerAs: "vm",
    template: "<h1>Header</h1><p>Body</p><footer>Footer</footer><button ng-click='vm.insert()'>Add Component</button>"
  }
});

myApp.directive("slideshow", function() {
    return {
    controller: function() {
        this.text = "THIS IS A SLIDESHOW";
    },
    controllerAs: "vm",
    template: "<h1>{{vm.text}}</h1>"
  }
});

点击here对于一个工作的 JSFiddle。

关于javascript - AngularJS:从列表中动态添加组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47557552/

相关文章:

ios - UIView 中的背景颜色未显示

python - 交互式 Python 图形用户界面

javascript - CSS3 列和图像

javascript - 在异步等待中更新值

javascript - 将项目推送到 Json 数组

javascript - 如何响应 AngularJS 指令中复选框的点击?

javascript - 使用 $filter 根据 Angular Controller 中的属性对对象数组进行排序

javascript - 网格缩略图在单击时扩展到全屏并过渡到新页面

javascript - 如何翻译 d3.js 节点?

javascript - ($根作用域 :inprog) $apply already in progress