AngularJS访问动态创建的html元素
AngularJS access dynamically created html elements
我试图访问一个新创建的DOM元素内的函数,但我不能。我不明白我做错了什么。
$scope.createCustomHTMLContent = function(img, evtTime, cmname, evt, cust, serv, descr, duration) {
var html = '<div class="row"><div class="btn-default"><button ng- click="testFun()">Edit</button></div>' + '</div>';
return html;
}
rows.push([""+cmname, ""+id,$scope.createCustomHTMLContent(thumbpath, evtTime, cmname, evt, cust, serv, descr, 0),new Date(datetime), new Date(datetime1),'color:'+colors[serv]]);
chart.draw(dataTable, options);
代码很多,所以我尽量只包含必要的内容。如果您有任何需要,请告诉我。
按钮基本上以工具提示的形式显示。但当我点击它不调用testFun函数。谢谢你
Google Charts 动态为tooltip元素生成DOM元素,在这种情况下需要使用$compile
服务来绑定tooltip标记,下面的示例演示了如何在tooltip中使用ng-click
:
angular.module('ChartApp', [])
.controller('ChartCtrl', function ($scope, $compile) {
$scope.logItems = [];
$scope.viewDetails = function (index) {
$scope.logItems.push(index + ' row clicked');
};
$scope.initChart = function () {
google.charts.load('current', { 'packages': ['corechart'] });
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
var dataTable = new google.visualization.DataTable();
dataTable.addColumn('string', 'Year');
dataTable.addColumn('number', 'Sales');
// A column for custom tooltip content
dataTable.addColumn({ type: 'string', role: 'tooltip', p: { html: true } });
dataTable.addRows([
['2010', 600, '<div id="tooltip-inner-container"><h2>Details for 2010 year</h2> <br/><button ng-click="viewDetails(0)">View</button></div>'],
['2011', 1500, '<div id="tooltip-inner-container"><h2>Details for 2011 year</h2> <br/><button ng-click="viewDetails(1)">View</button></div>'],
['2012', 800, '<div id="tooltip-inner-container"><h2>Details for 2012 year</h2> <br/><button ng-click="viewDetails(2)">View</button></div>'],
['2013', 1000, '<div id="tooltip-inner-container"><h2>Details for 2013 year</h2> <br/><button ng-click="viewDetails(3)">View</button></div>']
]);
var options = {
tooltip: {
isHtml: true,
trigger: 'selection'
},
};
var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
chart.draw(dataTable, options);
//
function initTooltip() {
var tooltip = document.getElementById("tooltip-inner-container");
if (tooltip != null){
var t = $compile(tooltip.outerHTML)($scope);
angular.element(tooltip).replaceWith(t);
}
}
google.visualization.events.addListener(chart, 'select', initTooltip);
google.visualization.events.addListener(chart, 'onmouseover', initTooltip);
google.visualization.events.addListener(chart, 'onmouseout', initTooltip);
}
};
$scope.initChart();
});
<script src="https://code.angularjs.org/1.4.8/angular.js"></script>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<div ng-app="ChartApp" ng-controller="ChartCtrl">
<pre style="width: 30%; height: 10pc; overflow-y: scroll; float:left;">
{{logItems | json}}
</pre>
<div id="chart_div" style="float:left; width:60%; height: 180px;"></div>
</div>
演示:Codepen
相关文章:
- 如何设置html元素填充的动画
- 删除对HTML元素的拖动
- 如何使用jquery迭代具有相同属性的html元素并查找onclick事件
- 如何使用JQuery在Javascript中转换字符串中的HTML元素
- 一个html元素的克隆次数太多
- 使用AngularJS Directive WHITOUT$scope创建一个动态html元素
- 为什么我在Internet Explorer上看不到html元素
- 重新排列HTML元素的顺序并更改内容
- 使用.on动态添加jquery/js不知道的html元素
- 如果类不是一个选项,如何在使用 jQuery 时控制(避免)嵌套 html 元素的样式
- 如何将html元素添加到tampermonkey中
- 访问html元素值javascript
- 如何在HTML元素上创建函数,而不是将元素作为参数传递
- 自定义HTML元素属性未显示-Web组件
- 让HTML元素充当停止滚动的锚点
- 将html元素插入到文本字符串中,以匹配另一个html字符串
- 替换HTML元素中的字符
- 如何将html元素添加为生成的内容
- 如何使用JavaScript在没有html dom的情况下隐藏html元素
- 使用JS加载HTML元素