为什么 ngClick 在$compile后不再工作

Why ngClick doesn't work anymore after $compile?

本文关键字:不再 工作 compile ngClick 为什么      更新时间:2023-09-26

http://plnkr.co/edit/kL2uLPQu2vHHKIvRuLPp?p=preview

单击按钮后,我从控制器调用编译 html 并将其注入正文的服务。

html 是针对控制器的$scope编译的(参见 $scope.name 起的"Hello World"),但 ngClick 不起作用。

为什么?

我如何针对单个手机的范围进行编译(在 ng 重复内?

我知道在这种情况下最好

有一个指令,但我需要了解它是如何工作的,因为我需要一个对话框(请参阅如何让 AngularJS 绑定使用花哨的框对话框?

我在这里看到的两个问题似乎都源于对角度表达和范围的误解。

指令或绑定中使用表达式时,例如在这两个示例中

<p>{{ phone.name }}</p>
<a ng-click="alert('angular')">Link</a>

他们无法访问 JavaScript 范围。其中使用的任何标识符都来自角度范围,即 $scope .所以

{{ phone.name }}

将显示

$scope.phone.name

ng-click="alert('angular')"

将尝试打电话

$scope.alert('angular')

查看您的 plunker,您正在尝试同时使用 phonealert,而无需将它们分配给范围。可以通过将警报分配给控制器范围来创建函数来执行警报,但phone会更加困难,因为它每次都需要不同。

您可以为此创建一个全新的范围并分配phone就像我在这里所做的那样,或者您可以从ng-repeat内部传递范围并在此范围内编译新元素,就像我在这里所做的那样。

名称alert未在编译模板的$scope上定义。如果您确实包含alert函数,则ng-click确实有效:

$scope.alert = function (msg) { window.alert(msg); };

演示

但是,正如您自己指出的那样,这项工作更适合directive而不是服务。