将数据从html主体传递到根组件

时间:2016-08-09 05:59:18

标签: angular typescript

我一直在尝试将数据从主布局index.html文件传递到角度根/起始组件<my-app>。很遗憾,我无法像我这样传递它们:<my-app [bodyData]="'passed'" ></my-app>来自我的index.html。

任何人都可以帮助我如何通过它们?提供了测试链接。

Plunker Test App Link

4 个答案:

答案 0 :(得分:7)

属性绑定不适用于根组件,即您引导的组件。

  

这不起作用的原因是您放置的index.html不是角度组件。因此,Angular不会编译这个元素。 Angular不会在运行时读取属性值,只是在编译期间,否则,我们会受到性能影响。 (托比亚斯博世)

看到这个问题:

解决方法是利用DOM:

<my-app bodyData="passed" ></my-app>

并在组件中:

@Component({
  selector: 'my-app',
  template: `
    (...)
  `
})
export class MyAppComponent {
  constructor(private eltRef:ElementRef) {
    let prop = eltRef.getAttribute('bodyData');
  }
}

这只适用于字符串属性......

答案 1 :(得分:5)

正如@Thierry所述,他提出的方法仅对传递字符串属性有效。下面是一个方法,您可以通过该方法传入具有已定义属性的对象。

为要传递的数据创建一个类。

appdata.ts

export class AppData {
  public isServerRunning: boolean;
  public isDataFromMemory: boolean;
}

在包含启动数据的窗口对象上定义实例

的index.html

<script>window.APP_DATA = { isServerRunning: false, isDataFromMemory: false }

告诉引导代码。

main.tss

import { AppData } from './app/appdata';

通过服务向您的组件提供数据

app.module.ts

import { AppData } from './appdata';
...
providers: [AppData,
{
  provide: AppData,
  useValue: window['APP_DATA']
}
],

访问组件中的数据

app.component.ts

constructor(appData:AppData) {
    console.log('AppComponent - ', appData);
}

答案 2 :(得分:1)

我尝试了同样的方案。但我得到的值为null。

在我的HTML中,我有标签

<my-app myattr="passed" >Loading ..</my-app>    

在我使用过的组件中

constructor(private _elementRef: ElementRef){
    let native = this._elementRef.nativeElement;
    let test = native.getAttribute("myattr");
    alert(test);
}   

该警报值将为空

答案 3 :(得分:0)

恢复长期死亡的主题永远是可爱的。这是我的解决方案。我在localStorage中使用了index.html

<script>
      localStorage.setItem('startpath', window.location.pathname);
</script>

然后只需app.component

ngOnInit() {

    var startpath = localStorage.getItem('startpath');
    if (startpath) {
        localStorage.removeItem('startpath');
        this._router.navigate([startpath]);
    } else
        this._router.navigate(['/dashboard']);
}