AngularJS排序DOM元素

时间:2014-01-06 20:03:06

标签: javascript angularjs

我有一个常见的用例。我有一个CMS,它提供部分数据和一个Web服务,补充这些数据来完成整个过程。适用于jQuery的是将所有部分数据转储到保留区域,当Web服务响应时,填写其余数据并将其移动到正确的位置。

我知道这与How do I move a view around the DOM with angular.js?类似,但我认为这是一个不同的用例,我没有看到答案。

基本上,90%的DOM预先加载,Angular可以考虑静态数据。但是,在Web服务响应之前,我们不知道属于哪里。在服务响应后我们如何“排序”DOM?有限数量的LI - Web服务是这些LI的状态,而不是用于迭代和创建它们的工具。

我的DOM看起来像:

<ul id="good">
</ul>

<ul id="bad">
</ul>

<ul id="temporary">
    <li id="bob"><p>Lorem ipsum dolar sit amet</p> DOB {{bob.dob}}</li>
    <li id="susan"><div>Roses are red violets are blue</div>Name: Susan, DOB: {{susan.dob}}</li>
    <li id="paul">Name: Paul, DOB: {{paul.dob}}</li>
<ul>

我知道如果一切都来自服务,它就像每个UL上的ng-repeat一样简单,但是大部分模板都是静态的,但每个LI都不同,而创建静态但不同内容的数据是不适用于网络服务。就是这样。它无法改变。

网络服务将回复如下内容:

{
   "good": [{
      "id": "paul",
      "dob": "01/01/2014"
   }, {
      "id": "susan",
      "dob": "05/01/2014"
  }],
  "bad": [{
     "id": "bob",
     "dob": "12/25/2013"
  }]
}

因此,那些处于“好”类别的人需要转向“好”的UL,那些处于“坏”类别的人需要转向“坏”的UL。在jQuery中,这只是:

$("#bob").appendTo("#bad");

DOM比上面的要复杂得多,所以希望通过一些标识符取一个div并将整个东西移到另一个容器中。

我们目前的做法是在每个UL中使用每个LI并使用ng-if根据类别显示/隐藏它,但这看起来像是一个猎枪方法,更优雅的东西会很有用。

这甚至可能吗?我们无法更新模型,因为模型没有足够的信息来创建视图。

1 个答案:

答案 0 :(得分:1)

抱歉,听起来你的设计问题很糟糕。模型是模型,期间。你正在混合范式和绊倒它。您需要让服务器向您发送数据,而不是html。你需要模仿静态而不是黑客。你需要让角度处理模型和渲染,而不是尝试和鞋拔jQuery黑客入侵它。移动dom元素是你应该用ng-repeat做的事情。角度的整个想法是永远不必执行你想要完成的确切类型的任务。