D3不能做什么Angular?

时间:2015-07-23 09:45:24

标签: javascript angularjs d3.js

我和D3.js很相似。

我在Angular项目中使用它,但我正在考虑摆脱它。也许我错过了什么。

我的理解是D3的优势来自于能够沿着某些数据更新DOM。这里通常是我如何使用它:

// JS Data
[{
  id: 1,
  name: 'Red',
  is_warm: true
}, {
  id: 2,
  name: 'Blue',
  is_warm: false
}]

// With the following code:
colors = d3.select($element.find('ul')[0]).selectAll('li.color').data(colorArray, function(d){ return d.id }).enter();
colors.text(function(d) { return d.name }).classed('color', true).classed('warm', function(d) { return d.is_warm; });

<!-- Generates -->
<ul>
  <li class="color warm">Red</li>
  <li class="color">Red</li>
</ul>

但我肯定可以对AngularJs做同样的事情:

$scope.colors =     [{
  id: 1,
  name: 'Red',
  is_warm: true
}, {
  id: 2,
  name: 'Blue',
  is_warm: false
}]

<ul>
  <li ng-repeat="color in colors" class="color" ng-class="color.is_warm ? 'warm' : ''"></li>
</ul>

哪个会产生或多或少相同的代码。

那么在AngularJs之上使用D3的重点是什么?

根据我的理解,主要区别在于 时重绘:

  • 使用D3时,应手动调用(例如,当服务器更新数据时)
  • 使用AngularJs,它将在$digest周期内,如果客户端CPU很少,这可能会很慢。

我是对的吗?这是唯一的区别吗?是否可以手动设置AngularJs重绘频率?为什么使用D3和AngularJs呢?

由于

1 个答案:

答案 0 :(得分:1)

要真正回答这个问题:

您无法以这种方式比较Angular和D3。 Angular是一个应用程序框架,而D3是一个数据表示框架。 D3可以操纵DOM的事实纯粹是因为它需要某种方式来操纵DOM来显示数据。

另一方面,Angular是MVC应用程序的框架,不仅限于显示数据,而且比D3更加通用化。

它们都是图书馆,相似之处在于它们;它们用于不同的目的,并做不同的工作。 D3实现了数据(其中一种方式是通过DOM),其中,Angular创建了丰富的Web应用程序。