【问题标题】:Array of elements to control view (AngularJS)控制视图的元素数组(AngularJS)
【发布时间】:2014-07-18 23:03:19
【问题描述】:

我想要做什么:

有没有办法在 AngularJS 中使用元素数组来填充带有子元素的 div?

我希望能够拥有一个自定义元素数组,并且当我更新数组时,它会更新视图。每次我进行更新时,自定义元素的指令都需要$scope.$digest() 元素。


伪代码:

html

<div id="parent" ng-controller="parentCtrl" ng-bind-html="arrOfElems"></div>

Javascript

app.controller('levelCtrl', ['$scope', '$compile', '$element', function(scp, cmpl, elem) {
  scp.arrOfElems = ['<ell></ell>', '<r-ell></r-ell>', '<sqr></sqr>'];
}]);

app.directive('ell', function() {
  return {
    restrict: 'E',
    template: <div class="block"></div>
  };
});
app.directive('rEll', function() {
  return {
    restrict: 'E',
    template: <div class="block"></div>
  };
});
app.directive('sqr', function() {
  return {
    restrict: 'E',
    template: '<div class="block"></div>'
  };
});

理想情况下,生成的 html 将是:

<div id="parent" ng-controller="parentCtrl" ng-bind-html="arrOfElems">
  <ell>
    <div class="block"></div>
  </ell>
  <r-ell>
    <div class="block"></div>
  </r-ell>
  <sqr>
    <div class="block"></div>
  </sqr>
</div>

【问题讨论】:

    标签: javascript arrays angularjs model-view-controller angularjs-directive


    【解决方案1】:

    创建一个简单的加载指令来编译它们并插入它们

    <div id="parent" ng-controller="parentCtrl" my-loader="arrOfElems"></div>
    

    未经测试但应该可以工作:

    app.directive('myLoader',function($compile){
       return function(scope, elem, attrs){
            var arrOfElems=scope[attrs.myLoader];
            angular.forEach( arrOfElems, function(newEl){
              elem.append( $compile(newEl)(scope) );
            });
       }
    });
    

    DEMO

    【讨论】:

    • 经过测试,完美运行!最初我认为它只会在角度引导时添加元素,但它会在您更新数组时更新视图。
    • 我没有了解更新数组的部分。数组更改时可能需要添加监视并清空元素
    猜你喜欢
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    相关资源
    最近更新 更多