【问题标题】:Insert another element with attribute value or scope model after directive element in AngularJS在AngularJS中的指令元素之后插入另一个具有属性值或范围模型的元素
【发布时间】:2013-09-06 21:12:32
【问题描述】:

我想创建一个指令,在使用 ng-repeat 指令创建的每个 <dt> 元素之后创建一个 <dd> 元素。如何将 <dd> 的内容设置为指令属性值或 ng-repeat 范围模型值?

<dl>
  <dt ng-repeat="item in items" insert-dd="{{ item.dd_vaue }}">{{ item.dt_value }}</dt>
</dl>

angular.directive('insertDd', function () {
  restrict: 'A',
  link: function (scope, element, attrs) {
    var dd = angular.element('<dd> here is attrs.insertDd or scope.item.dd_value </dd>');
    dd.insertAfter(element);
    $compile(dd)(scope);
  }
});

【问题讨论】:

    标签: angularjs angularjs-directive angularjs-scope


    【解决方案1】:

    在指令上设置scope 以传递每个item

    app.directive('insertDd', function ($compile) {
        return {
            restrict: 'A',
            scope: {
                item: '=insertDd'
            },
            link: function (scope, element, attrs) {
                // ng-repeat always inserts the next item directly after the last one,
                // so this element will actually be before the <dt> we just added
                if (element.next().length) {
                    element.next().after(element);
                }
    
                var dd = angular.element('<dd> here is {{item.dd_value}} or {{item.dt_value}} </dd>');
    
                element.after(dd);
                $compile(dd)(scope);
            }
        };
    });
    

    http://jsfiddle.net/sFEf5/2/

    【讨论】:

    • 谢谢,这就是我想要的。但是在我的真实项目中发生了一些奇怪的事情。 DT 中的 item.dt_value (在 ngRepeat 范围内的那个)消失了。仅打印来自 insertDd 指令的值。 DT里面有一块空地。如果我删除 insertDd 指令,它就会回来。我不明白发生了什么。
    • 似乎 insertDd 指令改变了 ngRepeat 指令的范围。如果我将 insertDd 范围内的模型名称从“item”更改为“foo”,那么“item”模型将从 ngRepeat 范围中消失。为什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    相关资源
    最近更新 更多