angularjs - Angular 中的动态标签生成

标签 angularjs

我正在尝试使用包含一堆指令名称的数组动态生成一个表单

$scope.components = ["textbox", "textbox", "radio", "checkbox", "label"];

我想使用 angular 生成具有这些名称的标签。例如
<textbox></textbox>
<textbox></textbox>
<radio></radio>
<checkbox></checkbox>
<label></label>

<--THE FOLLOWING DOESN'T WORK BUT WOULD BE COOL IF IT DID-->
<{{component}} ng-repeat="component in components track by $index"></{{component}}> 

现在作为替代方案,我执行以下操作
<div ng-include="component + '.html'" ng-repeat="component in components track by $index"></div>

这基本上完成了指令对 templateUrl 参数所做的事情。我是不是该
  • 制作一个生成标签的指令
  • 继续像我一样使用 ng-include
  • 使用另一种方法
  • 最佳答案

    您不能仅使用 Angular 表达式动态生成元素标签。但是,您可以创建自定义 directive为你做这项工作。

    概念证明: ( Demo :检查 DOM 树以查看生成的元素)

    angular.module('MyModule').directive('dynamicTag', function($compile) {
      return {
        restrict: 'E',
        scope: {
          components: '&components'
        },
        link: function($scope, $element) {
          var components = angular.isFunction($scope.components) ? $scope.components() : [];
          var domElements = [];
          angular.forEach(components, function(c) {
            var domElement = document.createElement(c);
            $compile(domElement)($scope);
            domElements.push(domElement);
          });
          $element.replaceWith(domElements);
        }
      };
    });
    

    HTML
    <dynamic-tag components="components"></dynamic-tag>
    

    正在 components范围内的字符串数组,如您的问题所示:
    $scope.components = ['textbox', 'radio', 'checkbox', 'label'];

    关于angularjs - Angular 中的动态标签生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27574333/

    相关文章:

    javascript - AngularJS ng 绑定(bind)不起作用 - 无法设置未定义的属性

    javascript - 使用多个服务的 AngularJS 指令

    javascript - ng-include 不起作用

    javascript - 如何划分通过 ng-repeat 创建的列表的单独部分?

    angularjs - 如何构造 ui-router 以具有 SEO 友好的 url 结构

    angularjs - Angular 1.5 单元测试组件,同时忽略子组件

    angularjs - 使用 $http 访问原始 XHR 对象

    css - Angular 水平形式的日期选择器字段未对齐

    unit-testing - AngularJS - 基本的注入(inject)测试

    javascript - ionic 输入日期默认设置为今天