Given example:
const layerList = new LayerList({
  view: view,
  listItemCreatedFunction: function(event){
    const item = event.item;
    // displays the legend for each layer list item
    item.panel = {
      content: "legend"
    };
  }
});
Is there a way to get reference to the legend instance created this way? E.g., if I would like to set legend.respectLayerVisibility to false?
Update - current workaround I use is by creating legend instance from Legend widget myself:
const legend = new arcgis.Legend({
    view: view,
    respectLayerVisibility: false,
    layerInfos: [
        {
            layer: item.layer,
        },
    ],
});
And add legend instance created this way to the panel instead of using string 'legend':
    item.panel = {
      content: legend
    };
There doesn't appear to be a way of doing so according to the documentation, but this presently works:
const layerList = new LayerList({
  view: view,
  listItemCreatedFunction: function(event){
    const item = event.item;
    // displays the legend for each layer list item
    item.panel = {
      content: "legend"
    };
    var handle = item.panel.watch("className", function(newValue, oldValue, propertyName, target) {
      if (target._legend) {
        handle.remove();
        handle = null;
        var legend = target._legend;
        alert("got legend: " + legend.id);
      }
    });
  }
});
Thank you, appreciate it.
I have ended up creating legend object for each item in layer list using Legend widget and layerInfos as:
const legend = new Legend({
  view: view,
  layerInfos: [{
    title: '',
    layer: item.layer,
  },],
});
Creating legend by just passing legend string is really convenient way if one doesn't need reference, but until there will be standard way to get a reference I stick with creating legend with these couple of lines.