-2
votes

Angular - TypeError: Impossible de lire la propriété '0' de non définie

J'ai un objet JSON que je récupère d'une API, voici un échantillon.

[checked]="acl.allowed[pr.systemName][cr.id]"


3 Réponses :


0
votes

Vous pouvez utiliser enchaînement optionnel et cela devrait corriger le problème

<tr *ngFor="let pr of acl?.availablePermissions">
  <td>
    <span>{{pr?.name}}</span>
  </td>
  <td *ngFor="let cr of acl?.availableApplicationRoles" [hidden]="cr?.id == '0'">
    <input 
      attr.data-role-id="{{cr?.id}}"
      attr.data-permission-name="{{pr?.name}}"
      attr.data-system-name="{{pr?.systemName}}"
      [checked]="acl.allowed[pr?.systemName][cr.id]"
      class="allow allow_{{cr?.id}}"
      type="checkbox" />
  </td>
</tr>


10 commentaires

essayé, il n'a pas aidé, toujours dans une boucle donnant des erreurs dans la console avec la même erreur sur la même ligne


Avez-vous mis le ? après le Cr aussi? Parce que l'erreur que vous obtenez signifie que cr.id est indéfini lorsque vous essayez de le faire correspondre à "0", vous ne devez pas obtenir cette erreur si vous utilisez une chaîne facultative [cachée] = " cr? .Id == '0' "


Oui, voici ma ligne


S'il vous plaît mettre le? Sur toutes les références à CR et à PR comme indiqué dans ma réponse - et veuillez mettre à jour votre question avec l'objet exact que vous recevez de console.log (acl.availableApplicationRoles)


ajouté, n'était toujours pas aidé, même erreur. L'objet est exactement ce que je reçois de l'API.


Vous êtes absolument manquant certaines informations cruciales - si l'objet est comme vous le dites et que vous avez mis le ? Ce qui précède doit fonctionner


Recevez-vous une chaîne JSON? ou un objet? Conservez-vous la chaîne JSON en un objet utilisable? json.parse (données) ?


J'ai ajouté de vous connecter à Ngoninit et il se connecte correctement tout et je peux voir sa journalisation dans la console avant que Angular rend la page, et que l'erreur se passe une fois que le Ngoninit est fini.


auto.acl.availableVermissions.foraach (fonction (article) {console.log (item.name); self.acl.availableApplicationRoles.foraach (fonction (CR) {console.log (cr.Id);});});});});


Je n'utilise pas Analys, c'est le type de retour renvoyer cela.http.get ('permission / index); et j'utilise juste auto.acl = données; de la promesse



2
votes

Vous cachez le TD sur cr.id == '0' xxx

alors qu'il est masqué, mais il crée toujours l'élément TD et l'instruction exécutera, votre erreur est d'obtenir une erreur: xxx

car cr.id est 0 dans ce cas: xxx

Vous devez ajouter une condition ou utiliser * ngif avec conteneur.


2 commentaires

J'ai essayé de envelopper avec * NGIF et je n'ai toujours pas travaillé, même erreur et ça va au TD, j'ai même pris l'attribut caché et échangé avec un NGIF, n'a pas fonctionné.


J'ai pu arriver au bas de la question et le problème est avec le filtre, autorisé n'est pas un tableau, son objet, et l'objet a une liste d'objets que je cherche à filtrer, jetez un coup d'œil à la Objet autorisé que j'ai partagé dans la question et que je vois comment je souhaite obtenir un objet avec le nom correspondant à ce qui correspond à la foreach, mais je ne suis pas défini parce que ce n'est pas la bonne façon de le faire, à ce moment-là, je ne suis pas sûr de savoir comment filtrer cela.



-1
votes

OK, donc j'ai enfin pu le faire fonctionner en utilisant le code suivant.

<tr *ngFor="let pr of acl.availablePermissions let i = index">
<td scope="col">
    <span>{{pr.name}}</span>
</td>
<td *ngFor="let cb of aclPermissions[i].cb">
    <input attr.data-role-id="{{cb?.roleId}}"
           attr.data-permission-name="{{pr?.permissionName}}"
           attr.data-system-name="{{cb?.systemName}}"
           class="allow allow_{{cb?.roleId}}"
           type="checkbox"
           [checked]="cb?.isChecked" />
</td>


0 commentaires