我试图理解在指令中添加renderer2修饰或在角度2中添加组件的必要性。
来自documentaion:renderer 2 documentaion 他们没有提供锄头工作的例子。任何人都可以用完整的例子解释。请
答案 0 :(得分:4)
import numpy as np
import matplotlib.pyplot as plt
def autolabel(rects):
"""
Attach a text label above each bar displaying its height
"""
for rect in rects:
height = rect.get_height()
ax.text(rect.get_x() + rect.get_width()/2., height,
'%d' % int(height),
ha='center', va='bottom')
methods =[{"name": 'name1', "score": 89.2, "year":2016, "dtype": 'type1'},
{"name": 'name2', "score": 95.54, "year":2017, "dtype": 'type2'},
{"name": 'name3', "score": 85, "year":2016, "dtype": 'type1'},
{"name": 'name4', "score": 86, "year":2015, "dtype": 'type1'},
]
pub_years = np.unique([method["year"] for method in methods])
dtypes = np.unique([method["dtype"] for method in methods])
n_years = len(pub_years)
n_dtypes = len(dtypes)
offset = np.zeros([n_years, n_dtypes])
width = 0.2
spacing = 0.01
color_list = plt.cm.Set3(np.linspace(0, 1, n_dtypes))
# colors = {'type1':'b', 'type2':'g'}
colors = {dtype: color_list[i] for i, dtype in enumerate(dtypes)}
legend_bars = []
fig, ax = plt.subplots()
for m in methods:
i = int(np.squeeze(np.where(pub_years==m['year'])))
j = int(np.squeeze([i for i, type in enumerate(dtypes) if type == m['dtype']]))
x = m["year"] + offset[i][j]
rect = ax.bar(x, m['score'], color=colors[m['dtype']], width=width)
autolabel(rect)
if offset[i][j]==0:
legend_bars.append(rect)
offset[i][j] = offset[i][j] + width + spacing
# add some text for labels, title and axes ticks
ax.set_ylabel('Accuracy')
ax.set_xlabel('Year of Publication')
ax.set_yticks(np.arange(0,105,5))
ax.set_ylim([0, 105])
ax.set_xticks(pub_years)
ax.set_xticklabels(pub_years)
ax.set_xlim([np.min(pub_years)- 1, np.max(pub_years) + 1])
ax.legend(legend_bars, dtypes)
plt.show()
只是一种抽象。
如果使用Universal(服务器端呈现)或WebWorkers,则没有可用的DOM,直接访问DOM的代码只会导致异常。
如果使用Renderer2
,Angular可以使用其依赖注入功能提供不同的实现,以使您的代码使用与当前运行代码的平台兼容的实现。
Renderer2
非常有限,因为所有方法都只允许更新DOM,但没有人允许读取来自DOM的任何信息。
如果您确实需要阅读,则需要采取特殊措施使其与Universal或WebWorker一起使用(例如,检查当前平台并跳过直接访问DOM的代码的执行,如果它不是浏览器平台,或者使用当前平台提供的其他人员