无法以角度更新子组件属性

如何解决无法以角度更新子组件属性

我有一个过滤数据的功能。当我在过滤器弹出窗口中输入一些值时,它会成功显示结果。然后我将这些数据添加到本地存储中(因为我需要将这些数据保留在反向链接上)并且我重定向到另一个页面,当我按下当前页面上的后退按钮并导航到相同的过滤器组件时,我需要设置过滤器组件值来自本地存储,但我收到了这样的错误“无法在 SearchUserGridComponent.autoFillAdvanceSearch 处设置未定义的属性‘状态’”在这个问题上非常努力,请帮忙。代码如下所示。

**SearchUserGridComponent.ts**



@ViewChild('callDialog',{ static: true }) callDialog: TemplateRef<any>;

openUserAdvancedSearchPopup() {
        let dialogRef = this.dialog.open(this.callDialog,{
          width: "80vw",maxWidth: "1366px",disableClose: true
        });
      }

**search-user-grid.component.html**

<ng-template #callDialog let-ref>
    <div *ngIf="design?.is_advanced_search_enabled" class="advanced-search" [ngClass]="{'show-advanced-search':showAdvancedSearch}">
        <advanced-user-search-component *ngIf="searchColumns?.length>0" [columns]="searchColumns" [dropDown]="dropDown"
            (getSearchedParams)="getSearchedParams($event)" (getSearchedTerms)="getSearchedTerms($event)"
            backgroundColor="rgba(190,190,0.4)">
        </advanced-user-search-component>
    </div>
   </ng-template>

**advanced-user-search.component.ts**

search() {
        debugger
        let params = new HttpParams();
        if (this.status != null && this.status != "A") {
            if (this.status == "AC") {
                params = params.append('isActive',"" + true)
            }
            else if (this.status == "I") {
                params = params.append('isActive',"" + false)
            }

        }
        if (this.passwordComplexity != null && this.passwordComplexity != "A") {
            if (this.passwordComplexity == "D") {
                params = params.append('IsDefaultPolicy',"" + true)
            }
            else if (this.passwordComplexity == "S") {
                params = params.append('IsDefaultPolicy',"" + false)
            }
        }
        if (this.userLockedUnlocked != null && this.userLockedUnlocked != "A") {
            if (this.userLockedUnlocked == "U") {
                params = params.append('IsLocked',"" + false)
            }
            else if (this.userLockedUnlocked == "L") {
                params = params.append('IsLocked',"" + true)
            }
        }
        if (this.selectedEntity && this.selectedEntity.entityId) {
            params = params.append('entities',"" + this.selectedEntity.entityId)
        }
        if (this.selectedEntityType != null) {
            params = params.append('entityTypes',"" + this.selectedEntityType)
        }
        // console.log(this.selectedRoles)
        if (this.selectedRoles != null) {
            let roleString = "";
            this.selectedRoles.forEach(role => {
                roleString = roleString + "," + role
            })
            params = params.append('roles',"" + roleString)
        }
        if (this.selectedBranch && this.selectedBranch.branchid) {
            params = params.append('branchid',"" + parseInt(this.selectedBranch.branchid));
        }
        this.getSearchedParams.emit(params);
        this.dialog.closeAll();
    }

用户点击后退按钮时,这些方法将在 search-User-Grid.component.ts 上调用

**SearchUserGridComponent.ts**

 ngAfterViewInit() {
  if (this.isBack == "true" && this.design.screen_name == "searchUsers") {
            this.showAdvancedSearch = true;
            this.autoFillAdvanceSearch();
          
        }
}

 @ViewChild("advancedSearchComponent",{ static: false }) advancedSearchComponent: AdvancedUserSearchComponent;

 autoFillAdvanceSearch() {
        let userSearchData = JSON.parse(localStorage.getItem("userSearchData"))
        if (userSearchData != null && userSearchData != undefined) {

            if (userSearchData["search"] == undefined || userSearchData["search"] == null) {
                this.searchTerm = "";
            }
            else {
                this.searchTerm = userSearchData["search"];
            }

            let status = userSearchData["isActive"];
            if (status == "true") { // Status
                this.advancedSearchComponent.status = "AC";
            }
            else if (status == "false") {
                this.advancedSearchComponent.status = "I";
//**Error throwing from here it tells "Cannot set property 'status' of undefined at SearchUserGridComponent.autoFillAdvanceSearch"**//
            }
            else {
                this.advancedSearchComponent.status = "A";
            }

            let IsDefaultPolicy = userSearchData["IsDefaultPolicy"];
            if (IsDefaultPolicy == "true") { // IsDefaultPolicy
                this.advancedSearchComponent.passwordComplexity = "D";
            }
            else if (IsDefaultPolicy == "false") {
                this.advancedSearchComponent.passwordComplexity = "S"
            }
            else {
                this.advancedSearchComponent.passwordComplexity = "A";
            }

            let IsLocked = userSearchData["IsLocked"];
            if (IsLocked == "true") { // IsLocked
                this.advancedSearchComponent.userLockedUnlocked = "L";
            }
            else if (IsLocked == "false") {
                this.advancedSearchComponent.userLockedUnlocked = "U"
            }
            else {
                this.advancedSearchComponent.userLockedUnlocked = "A";
            }



            let entityTypes = userSearchData["entityTypes"];
            if (entityTypes != undefined && entityTypes != null && entityTypes != "") {
                this.advancedSearchComponent.selectedEntityType = Number(entityTypes);
                this.advancedSearchComponent.populateEntity();

            }

            let entityId = userSearchData["entities"];
            if (entityId != undefined && entityId != null && entityId != "") {
                this.advancedSearchComponent.selectedEntity.entityId = Number(entityId);
                this.advancedSearchComponent.getSelectedEntity(this.advancedSearchComponent.selectedEntity);

                setTimeout(() => {
                    this.advancedSearchComponent.selectedEntity.entityId = Number(entityId);
                    this.advancedSearchComponent.selectedEntity.name = this.advancedSearchComponent.entities.filter(entity => entity.entityId == Number(entityId))[0].name;
                },1000)
            }

            let roles = userSearchData["roles"];
            if (roles != undefined && roles != null && roles != "") {
                this.advancedSearchComponent.selectedRoles = roles.split(',').slice(1).map(i => Number(i));
            }

            let branchid = userSearchData["branchid"];
            if (branchid != undefined && branchid != null && branchid != "") {
                setTimeout(() => {
                    this.advancedSearchComponent.selectedBranch.branchid = Number(branchid);
                    this.advancedSearchComponent.selectedBranch.name = this.advancedSearchComponent.branches.filter(branch => branch.branchid == Number(branchid))[0].name;
                },1000)

            }

            
            let sortingEvent = JSON.parse(userSearchData["sortingEvent"]);
            if (sortingEvent != null && sortingEvent != '') {
                this.sort.direction = sortingEvent["direction"];
                this.sort.active = sortingEvent["active"];
            }


            setTimeout(() => {
                this.advancedSearchComponent.search()
            },1000)

            if (userSearchData["showAdvancedSearch"] == "true") {
                this.showAdvancedSearch = true
            }
            else {
                this.showAdvancedSearch = false
            }


        }
    }

解决方法

此错误表示您的 advancedSearchComponent 未定义。这意味着您的 viewchild 找不到 ID 为 advancedSearchComponent 的任何项目。因此,只需将 #advancedSearchComponent 添加到您的 <advanced-user-search-component></advanced-user-search-component> 中,它应该可以解决该问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?