ts 中的 Parent 和 Ancestor 注释
Parent and Ancestor annotation in ts
尝试将 Parent
和 Ancestor
注释添加到 TypeScript 类型中,所以我做到了:
declare module "angular2/src/core/annotations_impl/visibility"{
function Parent():(target: any) => any;
function Ancestor():(target: any) => any;
}
使用任一注解都会抛出 "TypeError: decorator is not a function".
我正在使用 alpha 22。
为什么会出现此错误?
这是一个示例:
/// <reference path="typings/angular2/angular2.d.ts" />
import {Component,View,bootstrap} from "angular2/angular2"
import {Ancestor,Parent} from "angular2/src/core/annotations_impl/visibility"
@Component({
selector:"c"
})
@View({
template:`<p>{{app.message}}</p>`
})
class C{
app:App;
constructor(@Ancestor() app:App){
this.app = app;
}
}
@Component({
selector:"app"
})
@View({
template:`<c></c>`,
directives:[C]
})
class App{
message = "test";
}
bootstrap(App);
HTML:
<html>
<head>
<title>Angular 2 Quickstart</title>
<script src="https://github.jspm.io/jmcriffey/bower-traceur-runtime@0.0.89/traceur-runtime.js"></script>
<script src="https://jspm.io/system@0.16.7.js"></script>
<script src="https://code.angularjs.org/2.0.0-alpha.22/angular2.dev.js"></script>
<body>
<!-- The app component created in app.ts -->
<app></app>
<script>
System.import('app');
</script>
</body>
</html>
对我来说,这是通过使用您的原始表单但改为在模块 'angular2/annotations' 中声明它来实现的。
抱歉,我没有尝试您的示例,而是 Pascal Precht 的选项卡示例。我不确定您是否可以将 App 视为 C 的祖先,因为 "App is replaced by C"。
以下改编对我有用。当 B 和 C 的定义顺序相反时,我仍然在下面得到你的错误,这看起来很愚蠢。
import {bootstrap, Component, View, For} from 'angular2/angular2';
import {Ancestor,Parent} from 'angular2/annotations';
@Component({
selector:"b"
})
@View({
template:"<content></content>"
})
class B{
message : string = "test";
}
@Component({
selector:"c"
})
@View({
template:`<p>{{b.message}}</p>`
})
class C{
b:B = null;
constructor(@Ancestor() b:B){
this.b = b;
}
}
@Component({
selector:"app"
})
@View({
template:`
<b>
<c></c>
</b>
`,
directives:[B,C]
})
class App{
}
bootstrap(App);
尝试将 Parent
和 Ancestor
注释添加到 TypeScript 类型中,所以我做到了:
declare module "angular2/src/core/annotations_impl/visibility"{
function Parent():(target: any) => any;
function Ancestor():(target: any) => any;
}
使用任一注解都会抛出 "TypeError: decorator is not a function".
我正在使用 alpha 22。
为什么会出现此错误?
这是一个示例:
/// <reference path="typings/angular2/angular2.d.ts" />
import {Component,View,bootstrap} from "angular2/angular2"
import {Ancestor,Parent} from "angular2/src/core/annotations_impl/visibility"
@Component({
selector:"c"
})
@View({
template:`<p>{{app.message}}</p>`
})
class C{
app:App;
constructor(@Ancestor() app:App){
this.app = app;
}
}
@Component({
selector:"app"
})
@View({
template:`<c></c>`,
directives:[C]
})
class App{
message = "test";
}
bootstrap(App);
HTML:
<html>
<head>
<title>Angular 2 Quickstart</title>
<script src="https://github.jspm.io/jmcriffey/bower-traceur-runtime@0.0.89/traceur-runtime.js"></script>
<script src="https://jspm.io/system@0.16.7.js"></script>
<script src="https://code.angularjs.org/2.0.0-alpha.22/angular2.dev.js"></script>
<body>
<!-- The app component created in app.ts -->
<app></app>
<script>
System.import('app');
</script>
</body>
</html>
对我来说,这是通过使用您的原始表单但改为在模块 'angular2/annotations' 中声明它来实现的。
抱歉,我没有尝试您的示例,而是 Pascal Precht 的选项卡示例。我不确定您是否可以将 App 视为 C 的祖先,因为 "App is replaced by C"。
以下改编对我有用。当 B 和 C 的定义顺序相反时,我仍然在下面得到你的错误,这看起来很愚蠢。
import {bootstrap, Component, View, For} from 'angular2/angular2';
import {Ancestor,Parent} from 'angular2/annotations';
@Component({
selector:"b"
})
@View({
template:"<content></content>"
})
class B{
message : string = "test";
}
@Component({
selector:"c"
})
@View({
template:`<p>{{b.message}}</p>`
})
class C{
b:B = null;
constructor(@Ancestor() b:B){
this.b = b;
}
}
@Component({
selector:"app"
})
@View({
template:`
<b>
<c></c>
</b>
`,
directives:[B,C]
})
class App{
}
bootstrap(App);