0

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

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

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

为什么?

我如何针对单个电话的范围进行编译(在 ng-repeat 内?)?

我知道在这种情况下最好有一个指令,但我需要了解它是如何工作的,因为我需要它用于一个对话框(请参阅如何让 AngularJS 绑定使用花式对话框对话框?

4

2 回答 2

3

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

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

<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,您正在尝试同时使用这两者phone并且alert没有将它们分配给范围。您可以通过将其分配给您的控制器范围来创建一个执行警报的函数,但phone会更加困难,因为它每次都需要不同。

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

于 2013-11-02T13:31:58.443 回答
2

该名称alert$scope在模板编译时定义。如果您确实包含一个alert功能,那么ng-click确实有效:

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

Demo

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

于 2013-11-02T13:30:06.370 回答