Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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 在angular2中使用动态组件加载程序进行双向数据绑定_Javascript_Typescript_Angular - Fatal编程技术网

Javascript 在angular2中使用动态组件加载程序进行双向数据绑定

Javascript 在angular2中使用动态组件加载程序进行双向数据绑定,javascript,typescript,angular,Javascript,Typescript,Angular,我想知道如何使用angular2.for ex中的DynamicComponentLoader建立双向数据绑定 ngAfterViewInit() { //console.log('Generic Component...' + this.componentName + " Loading"); let componentIndex = this.keysRegister.indexOf(this.componentName); this.dcl.loadNextToLocation(thi

我想知道如何使用angular2.for ex中的DynamicComponentLoader建立双向数据绑定

ngAfterViewInit() {
//console.log('Generic Component...' + this.componentName + " Loading");
let componentIndex = this.keysRegister.indexOf(this.componentName);  
this.dcl.loadNextToLocation(this.typesRegister[componentIndex],this.target)
    .then(ref => { 
      ref.instance.componentModel = this.componentModel; 
    });  
console.log('Generic Component...' + this.componentName + " Loaded");
}
所以,如果我在动态加载的组件中对componentModel进行更改,它们也应该反映在通用组件中&反之亦然。
任何输入?

首先:DynamicComponentLoader现在不推荐用于两个版本,它将在下一个版本或之后成为专用。查看实现并复制它—它非常简单。 使用ComponentResolver解析组件,这将返回一个工厂,该工厂由ViewContainer用于创建组件

主要区别在于DynamicComponentLoader使用了您提供的ViewContainerRef,现在您可以直接使用ViewContainerRef实例来创建新的组件/模板

关于你的问题: 首先,让我们将双向数据绑定分离为
@Input
@Output
。我们必须这样做,因为它们在角度上确实不同

快速回答:您需要手动管理输入和输出,是的

为了充分理解为什么我们需要深入研究代码生成器以及它的功能,我将尝试保持在顶部,这需要时间来处理

需要记住的一点是:当您创建一个组件时,您会得到它的一个实例 ComponentRef包含对组件实例的引用

输出 对于需要订阅新创建组件实例上每个EventEmitter的输出,这些EventEmitter是您声明的
@Output
属性,您还需要在适当的时间取消订阅,或者在刚刚创建的组件上进行中继以
完成()
当发射器被摧毁时,它将被释放

输入 对于输入,您需要侦听<强> ngdoChuest生命周期挂钩,并检查每一个您认为是<代码> @输入< /C>项目的项目,如果它改变了。 此外,如果您想通过属性将数据传递给新组件,这是不可能的,因为您实际上没有宿主元素,您将要创建它。。。因此,向组件发送数据的方法是:

  • 创建组件时使用新注入器进行依赖项注入
  • 在创建实例后立即设置实例上的值(这与订阅输出的方法相同)
  • 现在,这是非常正确的。。。嗯,它是,它是许多样板,重复的代码,你可以自动化。。。这正是angular所做的

    使用模板引擎时,组件实际上是一个“幕后”代码,一步一步地表示上述所有内容。它为你做所有的检查,做所有的订阅和清理,还有更多。。。它还调用所有的生命周期挂钩,这些挂钩是组件中的实际中断点。 这一切都是可能的,因为angular解析组件的模板并了解[输入](输出),它还通过
    @Input()
    @Output
    来自元数据。。。 动画也是如此


    仔细想想,angular是一个HTML到代码引擎,它将HTML标记与用HTML编写的代码指令混合在一起,并从中创建JavaScript代码。该代码使用组件的实例(与模板匹配),并执行称为angular的神奇操作。

    首先:DynamicComponentLoader现在不推荐用于两个版本,它将在下一个版本或之后成为专用。查看实现并复制它—它非常简单。 使用ComponentResolver解析组件,这将返回一个工厂,该工厂由ViewContainer用于创建组件

    主要区别在于DynamicComponentLoader使用了您提供的ViewContainerRef,现在您可以直接使用ViewContainerRef实例来创建新的组件/模板

    关于你的问题: 首先,让我们将双向数据绑定分离为
    @Input
    @Output
    。我们必须这样做,因为它们在角度上确实不同

    快速回答:您需要手动管理输入和输出,是的

    为了充分理解为什么我们需要深入研究代码生成器以及它的功能,我将尝试保持在顶部,这需要时间来处理

    需要记住的一点是:当您创建一个组件时,您会得到它的一个实例 ComponentRef包含对组件实例的引用

    输出 对于需要订阅新创建组件实例上每个EventEmitter的输出,这些EventEmitter是您声明的
    @Output
    属性,您还需要在适当的时间取消订阅,或者在刚刚创建的组件上进行中继以
    完成()
    当发射器被摧毁时,它将被释放

    输入 对于输入,您需要侦听<强> ngdoChuest生命周期挂钩,并检查每一个您认为是<代码> @输入< /C>项目的项目,如果它改变了。 此外,如果您想通过属性将数据传递给新组件,这是不可能的,因为您实际上没有宿主元素,您将要创建它。。。因此,向组件发送数据的方法是:

  • 创建组件时使用新注入器进行依赖项注入
  • 在创建实例后立即设置实例上的值(这与订阅输出的方法相同)
  • 现在,这是非常正确的。。。嗯,它是,它是许多样板,重复的代码,你可以自动化。。。这正是angular所做的<