質問が正しい場合は型チェックを
INavInfoに対してであることを navInfoは、コンポーネントのバインディング宣言のメンバーであり、 あなたはやりたい...ビュー
で
<nav-bar navInfo="vm.navInfo"></nav-bar>
と「vm.navInfo」。
次に答えはいいえです。
あなたがHTMLビュー、 以内にあなたのコンポーネントをインスタンス化し、私の知る限りでは、現在、 はそのシナリオ、HTMLマークアップでチェックtypescriptですを検証する を支援する特別な工具がありませんので。 バインディングにangle型を指定するのではなく、バインドする 'key'とそのバインディング動作を宣言するだけです。 あなたは非常に角度1.xのフレンドリー
あるWebstorm、1つのファイル 内のすべてのコードを保持 インラインHTMLを使用してコンポーネントを宣言しても、言語機能はなく、角度大会
によってサポートされていないため、あなたはランタイムチェックを追加することができます(私はその良いアイデアを思いつきません。)
import * as angular from "angular";
export interface INavInfo {
text: string;
icon: string;
OnClick: Function;
}
function isNavInfo(x: any): x is INavInfo {
return x && typeof x.text === "string"
&& typeof x.icon === "string"
&& typeof x.OnClick === "function";
}
class NavBar implements angular.IController {
navInfo?: INavInfo;
$onInit =() => {
};
$onChanges? = (onChangesObj: angular.IOnChangesObject) => {
if (this.navInfo && !isNavInfo(this.navInfo)) {
throw "Nav Info is Not NavInfo";
}
};
clicked =()=> {
if(this.navInfo && this.navInfo.OnClick){
this.navInfo.OnClick();
}
}
}
class OtherController {
navInfo: INavInfo ;
constructor(){
this.navInfo = {
text: "Hello",
icon: "home",
OnClick:()=>{
console.log("link clicked!")
}
};
}
}
angular.module('NavBarTest', [])
.component(
'navBar', {
template: `<!-- there's No Type Checking here -->
<ul>
<li>
<a class="navText" href="" ng-click="$ctrl.clicked">
{{$ctrl.navInfo.text}}
<i class="naIvIcon">{{$ctrl.navInfo.icon}}</i>
</a>
</li>
</ul>>`,
bindings: {
navInfo: '<'
},
controller: NavBar,
// controllerAs: '$ctrl'
}
)
.component("navBarUser", {
template: ` <!-- there's No Type Checking here -->
<nav-bar nav-info="$ctrl.navInfo" ></nav-bar>
`,
controller: OtherController,
// controllerAs: '$ctrl'
});
出典
2016-12-22 04:28:04
Dan
_pass in_ 'navInfo'とはどういう意味ですか?あなたのコードで、このデータをコンポーネントに渡していますか? – rodrigogq