我无法理解如何使用属性选择器来限制 Controller 的范围。这是最小的 Controller 代码:

import 'package:angular/angular.dart';

@NgDirective(
  selector: '[my-controller]',
  publishAs: 'ctrl'
)
class MyController {
  String foo = 'fooooooooooooo';
}

main() {
  ngBootstrap(module: new Module()
      ..type(MyController));
}

这是使用该 Controller 的 View :

<!DOCTYPE html>
<html>
  <body>
    <div>

      <!-- DOES NOT WORK. MAKES SENSE. -->
      <p>Outside ng-app: {{ctrl.foo}}</p>
    </div>

    <div ng-app>
      <div my-controller>
        <!-- WORKS. MAKES SENSE -->
        <p>Inside my-controller div: {{ctrl.foo}}</p>
      </div>

      <!-- WORKS. WHY? It is outside the div with the my-controller attribute -->
      -->
      <p>Outside my-controller div: {{ctrl.foo}}</p>
    </div>

    <script type="application/dart" src="main.dart"></script>
    <script type="text/javascript" src="packages/browser/dart.js"></script>
  </body>
</html>

可以预料,{{ctrl.foo}}代码在带有ng-app的元素外部不起作用。同样可以预料,{{ctrl.foo}}<div my-controller>内部起作用。但是我不明白为什么它在<div my-controller>之外有效。有任何想法吗?

最佳答案

问题是您使用的是NgDirective而不是NgControllerNgDirective不会创建自己的范围,因此不会造成泄漏。切换到NgController应该可以解决此问题。

关于angularjs - 由CSS选择器困扰以触发 Controller ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20985108/

10-11 22:20
查看更多