试图让一个简单的点击处理程序工作,这被证明非常令人沮丧.该应用程序只是一个测试应用程序来尝试不同的Angular.Dart功能. – 使用Dart 1.6和Angular 1.0并在Dartium中运行 –
单击该按钮会引发错误.
Ng-单击“getMe”的“无getter”.但是输入和标签上的数据绑定完全正常.
示例代码
import 'package:angular/angular.dart'; import 'package:angular/application_factory.dart'; class TestMod extends Module { TestMod() { bind(ToggleComponent); } } @Component(selector: 'toggle-comp',templateUrl: "test.html",publishAs: 'toggle') class ToggleComponent { String name = ""; @NgTwoWay('rating') int rating; ToggleComponent() { } void clickMe() { print("Click"); } } void main() { applicationFactory() ..addModule(new TestMod()) ..run(); }
test.html文件 – 绑定适用于ng-model但不适用于ng-click
<div> <h3>Hellos {{name}} {{rating}}!</h3> Name: <input type="text" ng-model="name"> <button ng-click="clickMe()">Click me</button> </div>
最后这里是index.html文件
<!DOCTYPE html> <html ng-app > <head> <Meta charset="utf-8"> <Meta name="viewport" content="width=device-width,initial-scale=1"> <title>AngularDartTest</title> <script async type="application/dart" src="main.dart"></script> <script async src="packages/browser/dart.js"></script> <link rel="stylesheet" href="assets/main.css"> </head> <body> <toggle-comp rating="5"></toggle-comp> </body> </html>
按下按钮时的堆栈跟踪
No getter for 'clickMe'. STACKTRACE: #0 StaticClosureMap.lookupGetter (package:angular/core/parser/static_closure_map.dart:14:25) #1 StaticClosureMap.lookupFunction (package:angular/core/parser/static_closure_map.dart:25:26) #2 ClosureMapLocalsAware.lookupFunction.<anonymous closure> (package:angular/core/parser/parser.dart:253:44) #3 CallScope.eval (package:angular/core/parser/eval_calls.dart:27:25) #4 _UnwrapExceptionDecorator.eval (package:angular/core/parser/parser.dart:117:30) #5 BoundExpression.call (package:angular/core/parser/Syntax.dart:59:36) #6 NgEvent._initListener.<anonymous closure> (package:angular/directive/ng_events.dart:142:39) #7 _rootRunUnary (dart:async/zone.dart:840) #8 _ZoneDelegate.runUnary (dart:async/zone.dart:466) #9 _onRunUnary.<anonymous closure> (package:angular/core/zone.dart:122:63) #10 VmTurnZone._onRunBase (package:angular/core/zone.dart:104:16) #11 _onRunUnary (package:angular/core/zone.dart:122:17) #12 _CustomZone.runUnary (dart:async/zone.dart:748) #13 _CustomZone.runUnaryGuarded (dart:async/zone.dart:656) #14 _CustomZone.bindUnaryCallback.<anonymous closure> (dart:async/zone.dart:682)
解决方法
问题是角度变换器无法找到test.html,因此无法提取clickMe getter.仅当我们在模板中的表达式中看到符号时才会生成getter.
通过getter我的意思是映射“clickMe”:( o)=> o.clickme.您始终可以检查我们在main_static_expressions.dart中生成的所有getter / setter.
变压器应该是固定的(PR非常受欢迎),但同时有很多方法可以强制生成吸气剂:
>使用exportExpressions. docs
>在pubspec.yaml中使用html_files. docs
>将您的组件及其模板放在lib目录中.
附:在angular.dart v1.0中,publishAs不执行任何操作,因为表达式评估上下文是组件本身. docs