Ahm*_*bid 6 typescript angular
我一直在尝试将数据从主布局index.html文件传递到角度根/起始组件<my-app>.不幸的是我无法像这样传递它们:<my-app [bodyData]="'passed'" ></my-app>来自我的index.html.
任何人都可以帮助我如何通过它们?提供了测试链接.
属性绑定不适用于根组件,即您引导的组件.
这不起作用的原因是您放置的index.html不是角度组件.因此,Angular不会编译此元素.Angular在运行时不会读取属性值,只是在编译期间,否则,我们会受到性能影响.(托比亚斯博世)
看到这个问题:
解决方法是利用DOM:
<my-app bodyData="passed" ></my-app>
Run Code Online (Sandbox Code Playgroud)
在组件中:
@Component({
selector: 'my-app',
template: `
(...)
`
})
export class MyAppComponent {
constructor(private eltRef:ElementRef) {
let prop = eltRef.getAttribute('bodyData');
}
}
Run Code Online (Sandbox Code Playgroud)
这只适用于字符串属性......
如@Thierry所述,他提出的方法仅对传递字符串属性有效。下面是一种可以传递具有已定义属性的对象的方法。
为您要传递的数据创建一个类。
appdata.ts
export class AppData {
public isServerRunning: boolean;
public isDataFromMemory: boolean;
}
Run Code Online (Sandbox Code Playgroud)
在包含启动数据的窗口对象上定义一个实例
index.html
<script>window.APP_DATA = { isServerRunning: false, isDataFromMemory: false }
Run Code Online (Sandbox Code Playgroud)
告诉引导代码。
主目录
import { AppData } from './app/appdata';
Run Code Online (Sandbox Code Playgroud)
通过服务将数据提供给您的组件
app.module.ts
import { AppData } from './appdata';
...
providers: [AppData,
{
provide: AppData,
useValue: window['APP_DATA']
}
],
Run Code Online (Sandbox Code Playgroud)
从组件访问数据
app.component.ts
constructor(appData:AppData) {
console.log('AppComponent - ', appData);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5938 次 |
| 最近记录: |