2014-01-08 55 views
2

我很難理解如何使用屬性選擇器來限制控制器的範圍。下面是最小的控制器代碼:由CSS選擇器困惑觸發控制器

import 'package:angular/angular.dart'; 

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

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

這裏是使用該控制器的看法:

<!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>。有任何想法嗎?

+2

是的,這確實是一個錯誤:-(https://github.com/angular/angular.dart/issues/396 –

回答

5

問題是,您使用的是NgDirective而不是NgControllerNgDirective不創建它自己的範圍,因此泄漏。切換到NgController應該可以解決問題。

+0

是的,這正是問題所在,謝謝。 –

1

我認爲問題在於這樣一個事實@NgDirective不會創建它自己的範圍......

嘗試@NgComponent和移動你:
「在我的控制器的div:{{ctrl.foo}} 「
放入其模板屬性中。