将 WinJS 与 Angular2 一起使用
Using WinJS with Angular2
尝试使用 属性 从 Angular2 中配置 WinJS 控件,到目前为止我找不到解决方案,例如下面的代码抛出“无法绑定到 'dataWinOptions',因为它不是“元素”的已知 属性。
@View({
template: `<div id="rating" data-win-control='WinJS.UI.Rating' [data-win-options]='jsonRating'></div>`
})
class MyRating {
rating: number;
get jsonRating() {
return '{averageRating: ' + this.rating + '}';
}
constructor() {
this.rating = 1.5;
}
}
有什么提示吗?
@ericdes 关于你最后的评论我认为这是最好的选择。假设你有第 N 个 WinJS 控件
考虑以下代码。我在 options
.
中为 averageRating
属性 指定了不同的值
<winjs-control [options]="{averageRating: '1.5', someMoreOptions : 'x'}"></winjs-control>
<winjs-control [options]="{averageRating: '1.4', differentOptionsForThisOne :'Z'}"></winjs-control>
<winjs-control [options]="{averageRating: '1.3'}"></winjs-control>
<winjs-control [options]="{averageRating: '1.2'}"></winjs-control>
<winjs-control [options]="{averageRating: '1.1'}"></winjs-control>
// more and more...
组件将读取此 options
属性 并将其传递给视图。忘记指令,毕竟没有必要。
我们通过 attr.data-win-options
传递选项,因为它不是 div 的 属性,而是一个属性。
@Component({
selector : 'winjs-control',
properties : ['options']
})
@View({
template : `<div data-win-control="WinJS.UI.Rating" [attr.data-win-options]="jsonRating"></div>`,
})
class WinJSComponent implements OnInit, AfterViewInit {
constructor() {}
// We specify onInit so we make sure 'options' exist, at constructor time it would be undefined
// And we stringify it or otherwise it will pass an object, we need to convert it to a string
onInit() {
this.jsonRating = JSON.stringify(this.options);
}
// We process WinJS after view has been initialized
// this is necessary or 'data-win-options' won't be fully processed
// and it will fail silently...
afterViewInit() {
WinJS.UI.processAll();
}
}
这里是 plnkr for this case。
这是一种选择,恕我直言,我认为这是最简单的一种。另一个具有相同 HTML 内容的方法是将 parent 与其 children 进行通信,我尚未使用该方法测试您的情况。
尝试使用 属性 从 Angular2 中配置 WinJS 控件,到目前为止我找不到解决方案,例如下面的代码抛出“无法绑定到 'dataWinOptions',因为它不是“元素”的已知 属性。
@View({
template: `<div id="rating" data-win-control='WinJS.UI.Rating' [data-win-options]='jsonRating'></div>`
})
class MyRating {
rating: number;
get jsonRating() {
return '{averageRating: ' + this.rating + '}';
}
constructor() {
this.rating = 1.5;
}
}
有什么提示吗?
@ericdes 关于你最后的评论我认为这是最好的选择。假设你有第 N 个 WinJS 控件
考虑以下代码。我在 options
.
averageRating
属性 指定了不同的值
<winjs-control [options]="{averageRating: '1.5', someMoreOptions : 'x'}"></winjs-control>
<winjs-control [options]="{averageRating: '1.4', differentOptionsForThisOne :'Z'}"></winjs-control>
<winjs-control [options]="{averageRating: '1.3'}"></winjs-control>
<winjs-control [options]="{averageRating: '1.2'}"></winjs-control>
<winjs-control [options]="{averageRating: '1.1'}"></winjs-control>
// more and more...
组件将读取此 options
属性 并将其传递给视图。忘记指令,毕竟没有必要。
我们通过 attr.data-win-options
传递选项,因为它不是 div 的 属性,而是一个属性。
@Component({
selector : 'winjs-control',
properties : ['options']
})
@View({
template : `<div data-win-control="WinJS.UI.Rating" [attr.data-win-options]="jsonRating"></div>`,
})
class WinJSComponent implements OnInit, AfterViewInit {
constructor() {}
// We specify onInit so we make sure 'options' exist, at constructor time it would be undefined
// And we stringify it or otherwise it will pass an object, we need to convert it to a string
onInit() {
this.jsonRating = JSON.stringify(this.options);
}
// We process WinJS after view has been initialized
// this is necessary or 'data-win-options' won't be fully processed
// and it will fail silently...
afterViewInit() {
WinJS.UI.processAll();
}
}
这里是 plnkr for this case。
这是一种选择,恕我直言,我认为这是最简单的一种。另一个具有相同 HTML 内容的方法是将 parent 与其 children 进行通信,我尚未使用该方法测试您的情况。