Giter VIP home page Giter VIP logo

Comments (6)

nolanlawson avatar nolanlawson commented on August 9, 2024

@rochejul Why do you need access to the host element itself? Is there a specific property that you need that is not being exposed?

(In general, this is supposed to behave "close enough" to the actual HTMLElement object, although in practice the proxying does not perfectly emulate it.)

from lwc.

rochejul avatar rochejul commented on August 9, 2024

Hi @nolanlawson
Well, I would like at least to have the same similarity between this.template?.host in shadow mode and this in light mode.

For example, in shadow mode, I am able to inspect the parent dom and then to ensure I am in the "right place" (I want to ensure to be used only with some components, without using private events which are not really private). In light mode, I cannot inspect the parent dom (the parentElement or parentNode are omitted). So at the end, we have some gaps between the two mode

from lwc.

nolanlawson avatar nolanlawson commented on August 9, 2024

@rochejul The fact that this does not give you a real HTMLElement is a legacy behavior of LWC (mostly due to Locker and lack of JS private properties at the time).

Since it might be a while before we can fix that, maybe something like this.selfAsElement or this.elementSelf would solve your use case?

renderedCallback() {
  console.log(this); // LWC's shim that emulates the `HTMLElement`
  console.log(this.elementSelf); // the actual `HTMLElement`, in both shadow and light DOM
}

from lwc.

rochejul avatar rochejul commented on August 9, 2024

from lwc.

nolanlawson avatar nolanlawson commented on August 9, 2024

Marking as up-for-grabs since I think this should be pretty uncontroversial. We already expose it; this would just be formalizing what we expose.

Feature summary:

As a component author, I want to be able to access the real HTMLElement of my LightningElement from within one of its callbacks (e.g. renderedCallback), consistently in both shadow DOM and light DOM.

Solution: let's add this.elementSelf as a new property on LightningElement. You can look to the implementation of tagName for an example of how to do this: #3642

Unlike the recent this.style PR (#4044), I don't think we need API versioning for this. elementSelf is such an uncommon property name that I doubt anyone is squatting it.

from lwc.

rochejul avatar rochejul commented on August 9, 2024

Hi @nolanlawson
I created this PR if you are interested: #4259

Please let me know if I could help more

Many thanks for your help

from lwc.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.