javascript - 使用来自 json 响应的动态布局 : angularJS

标签 javascript json angularjs layout

在我的网络应用程序中,在搜索结果中,每个项目可以根据项目类型具有不同的外观。为了实现这一目标,我正在考虑在 json 响应中包含带有该特定项目的数据占位符的布局。如何将范围数据绑定(bind)到 json 响应模板中的占位符?

例如。 我的搜索结果类似于:

<li ng-repeat="item in items">
<div ng-bind-html="item.template"></div>
</li>

JSON 响应如下所示:

[{
"template_name":"One",
"template":"<div ng-repeat='subitem in item.subitems'>{{subitem.name}}</div>",
"subitems":[{name:"John"},{name:"Jane"}]
},
{
"template_name":"Two",
"template":"<div ng-repeat='subitem in item.subitems'>{{subitem.name}}</div>",
"subitems":[{name:"John"},{name:"Jane"}]
}
]

如您所见,我需要将 json 响应中的占位符与范围数据绑定(bind)。有什么办法可以做到吗?如果没有,您建议我如何解决这种情况?

谢谢!

最佳答案

虽然这显然行不通:

<li ng-repeat="item in items">
  <div ng-bind-html="item.template"></div>
</li>

因为您告诉 Angular 显示 item.template 内的 html,但您真正想要的是告诉它将 item.template 视为标记应该以与 template inside 指令类似的方式进行解析。

但是,您可以做的是定义自定义指令,以所需的方式处理 item.template。例如:

<li ng-repeat="item in items">
  <div dynamic-template="item.template" />
</li>

其中dynamic-template定义如下:

 module.directive('dynamicTemplate', function($compile){
    return {
      scope: {
        dynamicTemplate:'='
      },
      replace:true,
      transclude: true,
      link: function($scope, $element, $attrs, _, $transcludeFn){
        // since we have isolate scope - transclude the element so it has access 
        // to item and anything else available inside ng-repeat
        $transcludeFn(function($childElement, $childScope){ 
          var link = $compile($scope.dynamicTemplate);
          var bound = link($childScope);
          $element.append(bound);
        });
      }
    };
  });

当然,这并不理想,因为对 item.template 的更改不会得到反射(reflect),但您可以通过添加 $watch 轻松扩展它。

您可以找到工作示例 here .

关于javascript - 使用来自 json 响应的动态布局 : angularJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25423384/

相关文章:

javascript - 函数中的 2 个变量获得相同的日期值

mysql - 将 JSON 数据带入单个选择

JavaScript getJSON 返回数组中的重复值

javascript - 将变量传递给指令 AngularJS

javascript - requirejs 我们可以填充缩小的文件吗

javascript - Angular Spinner 无限循环,而 ngIf 在路由器 socket 中

javascript - 如何在知道前两个点和到下一个点的距离的情况下获得下一个点的坐标

java - 如何获取 json 文件中的每个 json 元素并将它们放入数组中

angularjs - 用ng-repeat生成的项目中的增量计数器

Javascript XML - 如何返回空值