1

在我的角度应用程序中,我有几个面板具有共享结构,相同的 html。

在面板内部,内容和行为发生了变化,基本上每个都是一个单独的指令,我们称它们为面板内容。

这是我认为最佳的解决方案,但我有一些架构上的疑问。

由于我有指令(其中包含真集):

<panel></panel>

它的模板如下所示:

<div>
    Content
    <ng-transclude></ng-transclude>
</div>

我必须重复面板

<ul>
    <li ng-repeat="panel in panels">
        <panel>
            <panel-content></panel-content>
        </panel>
    </li>
</ul

这一切都很好,但是在<panel-content>我应该展示的每次迭代中“选择”的合理好方法是什么?

可以说我有一个panel.id我可以使用的。

我注意到我可以通过多种方式实现它,我可以<panel-content>使用面板 ID 在视图内进行 ng-switch,我可以设置 templateUrl 具有动态部分并链接到不同的 URL,具体取决于panel.id.

但出于某种原因,我确信我错过了一些更好更直接的东西?

请不要说这个架构不是一成不变的,如果有其他结构更适合我的需求,请告诉我。

那么,问题又来了,我该如何选择?或者更确切地说,谁负责选择<panel-content>应该显示的内容。

4

1 回答 1

3

如果我理解正确,我会使用ng-includein 指令,每次模板都会更改id

就像是:

<ul>
    <li ng-repeat="panel in panels">
        <panel type-id="panel.id">
        </panel>
    </li>
</ul>

和指令:

app.directive('panel', 
 function() {
    return {
        restrict: 'E',
        replace: true,
        template: '<ng-include src="getTemplateUrl()"/>',


        link: function(scope,elem,attrs) {

           scope.getTemplateUrl = function() {

                var url;

                if(attrs.typeId !== undefined){
                    var url =  $rootScope.list_templates[attrs.typeId].value; // TODO: add validation
                  }


                return url;
            };
         }
      });

应用程序

 $rootScope.list_templates = [
   { id: 0, value: 'partials/upcoming_0.html'},
   { id: 1, value: 'partials/upcoming_1.html'},
   { id: 2, value: 'partials/upcoming_2.html'}
];
于 2015-04-10T12:13:09.933 回答