首页 > 编程知识 正文

javascript提交表单,angular文件上传

时间:2023-05-04 05:18:46 阅读:116997 作者:1637

动态表单使用场景

您可能需要一个灵活的表单,可以根据用户选择或服务返回的信息进行重新配置,例如添加或删除input元素组,添加或删除select元素组。

在这种情况下,如果从一开始就在模板中写入所有表单,然后使用单个ngif树结构进行选择控制,则程序将变得冗长。

这个时候。 程序优选能够基于用户选择或服务器响应自动生成所需的表单。 这就是动态表单要处理的业务。

与组件生成相关的概念组件的两种配置

要动态生成表单,必须了解组件是如何生成的。

一个angular组件由两部分组成。

Wrapper

Wrapper可以与组件进行交互,并在Wrapper初始化完成后实例化了组件。 它还负责组件的change检测以及触发挂接函数,如ngOnInit和ngOnChanges。

视图

View可以负责呈现模板、呈现组件外观,并触发Wrapper更改检测。 一个组件可以包含多个view,每个view都可以通过调用angular提供的两个函数自己生成和销毁。 这个过程不涉及顶级视图。

的常规加载方法(非动态加载方法)

通常,在根组件或另一个组件中嵌入组件进行使用。 嵌入的组件称为子组件,嵌入的组件称为父组件。 现在,编译子组件代码后,将生成组件工厂的组件工厂。 这是angular核心类的组件工厂的实例。 它还由在父“组件”视图中生成组件的dom节点和生成该组件的WritView负责

动态加载组件

如果尝试在组件的视图中插入动态组件,则无法获取此动态组件的实例,因为它是由非动态组件编译器完成的。

实现动态组件

angular提供了几个函数来解决上述问题。 要使用这些函数,必须注入两个对象。

构造器(

privatecomponentfactoryresolver : componentfactoryresolver,

privateviewcontainerref 3360 viewcontainerref、

() )。

}

我们注入了ComponentFactoryResolver和ViewContainerRef。

ComponentFactoryResolver使用一种方法“resolvecomponenent”,该方法将组件类作为参数接收,并生成基于该组件类的组件工厂,即前面提到的组件工厂

ViewContainerRef提供了一种将组件工厂作为参数接收并在视图中生成子组件的方法“createComponent ()”。 (我个人的理解是,我处理了主机视图所做的事情,并生成了组件的wrapper和view。)

实现动态表单

上面简要介绍了实现动态组件的一些技术,现在让我们考虑一下如何创建动态表单。

具体的想法

我们想建立独立的动态表单模块。 如果您想使用动态表单,可以轻松部署此模块,稍加配置即可使用。

本模块完成后,我们希望从顶级用户的角度来看,这是一个这样的工作流程。

可以轻松创建具有输入属性的组件。 问题的核心是这个组件如何根据输入属性生成所需的表单。

这意味着它本身是调用ComponentFactoryResolver和ViewContainerRef来动态生成组件,还是交给其他人?

下图是实现想法。

实际上,将动态表单拆分为较小的动态组件,在不预先加载的情况下,外部组件充当容器,所有动态组件都以合适的服装生成和销毁,他们共同构成了动态表单。 调用ComponentFactoryResolver和ViewContainerRef生成组件的部分逻辑未集成到外部容器中,而是传递给自定义命令和ng-container。 因为指令没有视图,所以他通过注入ViewContainerRef获取了主机的视图容器。 由于不渲染ng容器,因此检索到的视图容器是外部组件容器的视图容器。

该处理的优点相当于动态组件本身管理各个分割后的动态组件,而不用在外部组件上统一管理。

外部组件容器如下所示:

configs是用户的配置数据,自定义命令驻留在ng-container中,根据config渲染每个动态组件,但ng-container是透明的。

看看代码目录的结构,最后是这样的

以上是大致的实现思路,具体来说,开头提到的两篇文章有很多值得关注的细节,阐述得很详细。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。