首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态创建循环指令

动态创建循环指令
EN

Stack Overflow用户
提问于 2014-05-15 00:03:21
回答 2查看 2.6K关注 0票数 1

我有一个main directive,它的作用域上有一个array,它包含用于构造其他directives的数据,这些数据应该被编译并附加到main directive中。

问题是,当我迭代该数组时,我只从数组中的最后一个元素获得数据,因此无法正确地绑定每个自定义指令的各自数据。

柱塞

主要指令:

代码语言:javascript
复制
 angular.module('testApp')
   .directive('mainDirective', ["$compile", function ($compile) {

    return {
       template:   ' <div><p>Main Directive </p><div class="insertion-point"></div></div>',

       link: function (scope, element, attributes, controller) {

          var insertionPoint = element.find('.insertion-point');

          angular.forEach(scope.demoObj.panels, function (value, index) {


              var directiveName = value.type;

              scope.value = value;
              var directiveString = "<div " + directiveName + " panel-data=value ></div>";

              var compiledElement = $compile(directiveString)(scope);

              insertionPoint.append(compiledElement);

        });
    }


    }


}]);

指令被嵌套:

代码语言:javascript
复制
 angular.module('testApp')
 .directive('nestedDirective', [function () {

    return {

       scope:{
         panelData:'='
       },
       template:' <div><p>Nested Directive </p>{{panelData.data.test}}</div>'
    }
}]);

数据如下:

代码语言:javascript
复制
                  $scope.demoObj = {

              panels:[
                {
                    id:'unique_id_1',
                    type:'nested-directive',
                    data:{
                      test:'test 1'
                    }
                },
                {
                    id:'unique_id_2',
                    type:'nested-directive',
                    data:{
                      test:'test 2'
                    }
                },
                {
                    id:'unique_id_3',
                    type:'nested-directive',
                    data:{
                      test:'test 3'
                    }
                }

            ]
        }

据我所知,编译并不是在forEach语句中立即进行的,这就是为什么每个指令都使用id unique_id_3 (数组中的最后一个元素)从对象中获取数据。而且,所有指令都有独立的作用域。

编辑:我理解在forEach中,我需要将值添加到作用域,这样我就可以将其添加到嵌套指令隔离作用域,并且我理解,当循环完成时,scope.value将是循环的最后一个value,但我的印象是,编译将把值传递给嵌套指令并完成它。

那么,什么时候开始编译呢?

我怎样才能绕过这个限制呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-15 13:38:32

问题是compiledElement的链接步骤将在下一个摘要周期中发生,此时,scope.value是数据的最后一个值。

解决方案是在作用域上创建不同的值属性,如下所示:

代码语言:javascript
复制
var directiveName = value.type;
var valueProp = 'value' + index;
scope[valueProp] = value;
var directiveString = "<div " + directiveName + " panel-data=" + valueProp + "></div>";

扑通

票数 2
EN

Stack Overflow用户

发布于 2015-03-09 10:54:18

请查找下面的更新代码。解决方案不是在下面的作用域中创建重复变量。我创建了同样的柱塞

代码语言:javascript
复制
angular.module('testApp')
 .directive('mainDirective', ["$compile", function ($compile) {

return {
   template:   ' <div><p>Main Directive </p><div class="insertion-point"></div></div>',

   link: function (scope, element, attributes, controller) {

      var insertionPoint = element.find('.insertion-point');

      angular.forEach(scope.demoObj.panels, function (value, index) {

          var directiveName = value.type;
          var directiveString = "<div " + directiveName + " panel-data=demoObj.panels["+ index+"]></div>";

          var compiledElement = $compile(directiveString)(scope);

          insertionPoint.append(compiledElement);
    });
}
}
}]);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23667154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档