我有一个应用程序,我需要创建html并将其添加到对象数组。这个html应该被输出到页面中。够简单。但是,我还需要使html响应用户操作(点击),在这种情况下,angular需要我使用$ compile来创建角化模板。
查看Plunkr。在这个例子中,应该发生的事情是,当你点击其中一个按钮时,将会在对象中嵌入html代码生成一个弹出窗口,您可以在JSON输出中看到该代码。
只要我这样做,我得到的错误转换为JSON循环结构。如果我不这样做,则不会调用ng-click =“Go()”。
SCRIPT
var template = "<ul class='unstyled'>" +
"<li ng-click='go()' style='background-color:lightcyan;'><ul class='inline'><li>1...</li><li>1...</li></ul></li>" +
"<li ng-click='go()'><ul class='inline'><li>1...</li><li>1...</li></ul></li>" +
"<li ng-click='go()' style='background-color:lightcyan;'><ul class='inline'><li>1...</li><li>1...</li></ul></li>" +
"</ul>";
// template = $compile(template)($scope);
$scope.data = [
{"id": 1, "html": template},
{"id": 2, "html": template}
];
$scope.go = function() {
alert('It works');
};
$scope.openPopin = function (html) {
var e = window.event;
var popin = document.getElementById('popin');
var innerdiv = document.getElementById('innerdiv').innerHTML=html;
popin.style.top= e.pageY - 20+"px";
popin.style.left = e.pageX - 20+"px";
popin.style.marginLeft = -500+"px";
popin.style.marginTop = -100+"px";
};
$scope.closePopin = function() {
var popin = document.getElementById('popin');
popin.style.top = -500+"px";
popin.style.left = -500+"px";
};
HTML
<div class="popin grey-border" id="popin">
<button class="close" ng-click="closePopin()">×</button>
<div id="innerdiv"></div>
</div>
<pre>{{ data |json }} </pre>
<br/>
<table style="float: right;">
<tr ng-repeat="d in data" id="{{$index}}">
<td>{{ d.id }} -
<button class="btn btn-mini btn-info" ng-click="openPopin(d.html)"><i class="icon-info-sign"></i></button>
</td>
</tr>
</table>
如果我尝试一下plunker,我会得到一个不同的错误:'错误:e是undefined'。 (使用FF 26)可能是一个跨浏览器兼容性问题。 – towr