【问题标题】:Angular 5 bind to a custom propertiesAngular 5绑定到自定义属性
【发布时间】:2018-03-24 20:16:51
【问题描述】:

我有角度组件将值传递给子组件,并且该子组件在 ngFor 中使用该值,父组件从服务获取原始值做 http 请求。

这是将“cats”传递给子道具 [catsToShow] 的 http 请求承诺的父组件

<div class="container">
  <div class="ddlContainer clearfix">
    <select class='select-option' [(ngModel)]='selectedCat' (ngModelChange)='onOptionsSelected($event)'>
      <option *ngFor='let cat of cats' [value]="cat.name">{{cat.name}}</option>
    </select>
  </div>
  <app-add-modal [catsToShow]="cats"></app-add-modal>
  <ul>
    <li *ngFor="let item of items">{{item.body}}</li>
  </ul>
</div>

这是子组件尝试生成 ngFor :

<div class="btnContainer">
  <button type="button" class="btn btn-outline-success addNewModalOpener" (click)="openAddNewModal()">Add New</button>
</div>
<div id="addNewModal" class="formAddContainer">
  <form class="formAdd">
    <input class="form-control form-control-lg" type="text" placeholder="name" />
    <input class="form-control form-control-lg" type="text" placeholder="body" />
    <select class='select-option form-control'>
      <option *ngFor='let cat of catsToShow' [value]="cat.name">{{cat.name}}</option>
    </select>
    <button type="submit" class="btn btn-success">add</button>
  </form>
</div>

import { Component, OnInit, Input} from '@angular/core';

    declare var $:any;

    @Component({
      selector: 'app-add-modal',
      templateUrl: './add-modal.component.html',
      styleUrls: ['./add-modal.component.scss']
    })
    export class AddModalComponent implements OnInit{

      @Input() catsToShow;

      constructor() { }

      ngOnInit() {

          $(".formAddContainer").iziModal({ width: '80%', padding: 10, borderBottom: false, background: 'rgba(136, 160, 185,0)' });
          $('#addNewModal').iziModal('open');
        
      }

    }

我正在使用 iziModal 为用户初始化一个框以开始收集数据,下拉列表向用户显示没有 ngFor 生成的项目...所以如何首先同步绑定的输入值 [catsToShow] 以生成 ngFor 列表然后显示那些在 iziModal 框中给用户的项目

【问题讨论】:

  • 您是否在浏览器的控制台中看到任何错误消息?
  • 没有错误,ngFor 列表只是空的
  • 但是猫在父组件中工作。我的意思是它肯定包含显示的值?
  • 是的,如果我在 setTimeout 中将代码包装 1 秒,则猫有值,将生成列表
  • @andrewsaeed,您将 jquery 的内容与 angular 混合在一起,这当然是行不通的,因为它们彼此一无所知,并且不注意邻居区域可能发生的任何变化。也就是说,当其他人试图给你一个提示时,很可能问题在于你如何初始化该集合,但这里不包含该代码。请这样做。

标签: angular


【解决方案1】:

尝试等待模态的实例化,直到列表确实到达。

import { Component, OnInit, Input} from '@angular/core';

    declare var $:any;

    @Component({
      selector: 'app-add-modal',
      templateUrl: './add-modal.component.html',
      styleUrls: ['./add-modal.component.scss']
    })
    export class AddModalComponent implements OnInit{

      @Input() catsToShow;

      constructor() { }

     ngOnInit() {}

     ngOnChanges(changes: SimpleChanges) {

        if(changes.catsToShow) {

           $(".formAddContainer").iziModal({ width: '80%', padding: 10, borderBottom: false, background: 'rgba(136, 160, 185,0)' });
           $('#addNewModal').iziModal('open');

        }

    }

【讨论】:

  • 经过几天的搜索,我发现当您处理 html Dom 元素时,只关注一种方法,所以从头到尾使用 jquery 方法或角度方法,谢谢您的帮助
猜你喜欢
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 2013-10-09
  • 1970-01-01
  • 2012-08-29
  • 2018-08-14
相关资源
最近更新 更多