我希望這對某個人來說很容易,因爲這會讓我瘋狂。親身體驗這個問題:plnkr.co。AngularJS的ngBindHtmlUnsafe塊單擊事件(或一些奇怪的事情)
我想從控制器提供一些HTML到視圖。這裏的控制器,它是從Twitter Bootstrap例子中提供禮貌適應:
angular.module('plunker', ['ui.bootstrap']);
function DropdownCtrl($scope) {
$scope.items = [
"The first choice!",
"And another choice for you.",
"but wait! A third!"
];
$scope.html = '<li class="dropdown" ng-controller="DropdownCtrl">' +
'<a class="dropdown-toggle">' +
'Click me for a dropdown, yo!' +
'</a>' +
'<ul class="dropdown-menu">' +
'<li><a>Why</a></li>' +
'<li><a>doesn\'t</a></li>' +
'<li><a>this</a></li>' +
'<li><a>work???</a></li>' +
'</ul>' +
'</li>';
}
沒有什麼令人興奮的,當然。這裏是觀點:
<h3>This works fine</h3>
<li class="dropdown" ng-controller="DropdownCtrl">
<a class="dropdown-toggle">
Click me for a dropdown, yo!
</a>
<ul class="dropdown-menu">
<li ng-repeat="choice in items">
<a>{{choice}}</a>
</li>
</ul>
</li>
<h3>Why doesn't this work?</h3>
<div ng-controller="DropdownCtrl" ng-bind-html-unsafe="html"></div>
簡而言之,第一個下拉菜單正常工作,根據提供的示例。然而,第二個下拉菜單什麼都不做。它的代碼從控制器傳遞到視圖並完整傳遞,但下拉不會下降。
告訴我有人遇到this problem之前。
我的猜測是,角度「感知」它需要處理該注入有該字符串,它只是假設它是一些HTML。我認爲你可能需要使用一個指令,而不是定義一個模板,以便角度正確處理它,但只是一個猜測。 – shaunhusain
這就是我首先發現問題的方法。我試圖從指令從控制器傳遞到視圖的HTML。這些指令按照自己的意圖工作,但只要您將它們綁定到ngBindHtmlUnsafe的元素,它們就會中斷。我甚至無法在指令定義本身中綁定點擊事件。就好像包含元素阻塞事件一樣。 –
對不起,如果這聽起來很可笑,但說話角度一般。目前,您正在使用內置指令來嘗試注入角度需要處理的代碼。不過,我相信這個指令的目的只是爲了在頁面中注入一些非角度的HTML。相反,如果您使用angular.module(「myModule」,[])。directive(「myDirective」,function()...並在自定義指令中定義了您自己的指令,則將您的html作爲模板屬性,然後使用 – shaunhusain