Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何定义一个;“全球”;组件中的变量?(四)_Javascript_Angular - Fatal编程技术网

Javascript 如何定义一个;“全球”;组件中的变量?(四)

Javascript 如何定义一个;“全球”;组件中的变量?(四),javascript,angular,Javascript,Angular,我有一个appeditor组件,它的结构中包含许多嵌套组件。加载组件时,它会创建一个数组:obj\u list:MyObject[] 许多嵌套组件将包含一个元素,其中必须在每个组件中选择对象列表中的一个元素 如何与结构中的所有元素共享此列表?在嵌套组件之间共享数据的一种方法是Input/Output+EventEmitter系统 或者,您可以使用共享服务在组件之间传输数据。 以下是firebase关于组件交互的官方文档和好帖子的链接: 例如,在您的情况下,您可以通过Inputs将obj_li

我有一个
appeditor组件
,它的结构中包含许多嵌套组件。加载组件时,它会创建一个数组:
obj\u list:MyObject[]

许多嵌套组件将包含一个
元素,其中必须在每个组件中选择
对象列表中的一个元素


如何与结构中的所有元素共享此列表?

在嵌套组件之间共享数据的一种方法是Input/Output+EventEmitter系统

或者,您可以使用共享服务在组件之间传输数据。 以下是firebase关于组件交互的官方文档和好帖子的链接:

例如,在您的情况下,您可以通过
Input
s将
obj_list
app editor component
传递到子组件,然后在子组件中观察
的更改事件,并将更改发送回
app editor component


但是,如果您有深层嵌套,使用服务是更好的方法

多个嵌套组件共享的实体应该是服务。这自然是由角度分层喷油器提供的

更重要的是,如果数据应该以异步方式更改,那么应该以某种方式通知组件。这可以通过RxJS观测值方便地实现:

import { Subject } from 'rxjs/Subject';

@Injectable()
class Foo {
  objListSubject = new Subject();
  objList$ = this.objListSubject.asObservable();
}

@Component({
  providers: [Foo] // belongs to NgModule providers if the service is global
  ...
})
class ParentComponent {
  constructor(private foo: Foo) {
    ...
    this.foo.next(['bar']);
  }
}

@Component({
  template: `
    <select ...>
      <option *ngFor="foo.objList$ | async">
    </select>
  `,
  ...
});
class ChildComponent {
  constructor(public foo: Foo) {}
}
从'rxjs/Subject'导入{Subject};
@可注射()
福班{
objListSubject=新主题();
objList$=this.objListSubject.asObservable();
}
@组成部分({
提供者:[Foo]//如果服务是全局的,则属于NgModule提供者
...
})
类ParentComponent{
构造函数(私有foo:foo){
...
this.foo.next(['bar']);
}
}
@组成部分({
模板:`
`,
...
});
类子组件{
构造函数(公共foo:foo){}
}

我对angular不太熟悉,但您不能使用依赖项注入吗?