困惑的CSS选择器触发控制器

Sha*_*uli 2 dart angularjs angular-dart

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

import 'package:angular/angular.dart';

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

main() {
  ngBootstrap(module: new Module()
      ..type(MyController));
} 
Run Code Online (Sandbox Code Playgroud)

以下是使用该控制器的视图:

<!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>
Run Code Online (Sandbox Code Playgroud)

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

Mis*_*ery 5

问题是,你使用的NgDirective不是NgController.NgDirective没有创建自己的范围,因此泄漏.切换到NgController应该解决问题.