- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我的自定义 HTMLElements 中的大多数事件处理程序看起来像这样,
totalChanged() {
if (!this.shadowRoot) return
const t = this.shadowRoot.querySelector('#total')
if (t) t.innerHTML = String(this.price * this.quantity)
}
有没有可能让它看起来像
@event('#total')
totalChanged() {
return String(this.price * this.quantity)
}
不知道如何到达装饰器中的 shadowRoot,this
指的是装饰器模块本身,而不是 HTMLElement。而proto是我自定义元素的原型(prototype),也不是我想要的this
export function event(select: string) {
return (proto: any, propName: string) : any => {
console.log(this.shadowRoot)
}
}
这里 this
只是未定义
export function event(select: string) {
return function (proto: any, propName: string) : any {
console.log(this.shadowRoot)
}
}
编辑:示例
index.html
<test-2></test-2>
<script src="test2.js"></script>
test2.ts => test2.js(目标 ES2017)
function defineClass(tagname: string) {
return function classDecorator<T extends {new(...args:any[]):{}}>(constructor:T) {
console.log("Define: " + constructor.name)
window.customElements.define(tagname, constructor)
return class extends constructor {
newProperty = "decorator";
hello = "decorator";
}
}
}
function myevent(select: string) {
return function (this:any, proto: any, propName: string, descriptor: PropertyDescriptor) : any {
let originalMethod = descriptor.value;
descriptor.value = function(this:any, ...args: any[]) {
console.log('test', this)
return originalMethod.apply(this, args)
}
return descriptor;
}
}
@defineClass('test-2')
class Greeter2 extends HTMLElement{
property = 'property2'
hello = 'hello2'
constructor() {
super()
console.log(this.hello)
}
@myevent('hello')
helloFn() {}
connectedCallback() { }
disconnectedCallback() { }
attributeChangedCallback(name: string, oldValue: string, newValue: string) { }
adoptedCallback() { }
}
console.log('test-2: ', document.querySelector('test-2').hello)
@defineClass('test-3')
class Greeter3 {
property = 'property3'
hello = 'hello3'
constructor() {
console.log(this.hello)
}
@myevent('hello')
helloFn(){}
}
console.log('test-3: ', new Greeter3());
EDIT2:需要调用方法 new Greeter3().helloFn()
请参阅 Diullei 回答
最佳答案
它缺少访问对象上下文的descriptor
参数。试试这个代码:
export function event(select: string) {
return function (proto: any, propName: string, descriptor: PropertyDescriptor) : any {
let originalMethod = descriptor.value; // saving the original function
descriptor.value = function(...args: any[]) { // changing the original function body
console.log(this.shadowRoot);
return originalMethod.apply(this, args); // calling original function
}
return descriptor;
}
}
关于typescript - this.shadowRoot 来自装饰器内部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43018143/
我正在尝试在 Javascript 中选择 Shadow 根,以便我可以设置内部元素的样式。但是当使用 elem.shadowRoot 时它返回 Null 尽管 ShadowRoot 是下一个元素。下
我的自定义 HTMLElements 中的大多数事件处理程序看起来像这样, totalChanged() { if (!this.shadowRoot) return const
我正在尝试克隆影子根,以便我可以交换 的实例及其相应的分布式节点。 我的方法: var shadowHost = document.createElement('div'); var shadowR
我试图在另一个自定义元素阴影根中访问我的自定义元素的内容。 index.html刚好有一个 my-tag-wrapper元素: ... ... my_tag_wrapper.html包含 my-t
我有一个丰富的编辑器,我正在将其重写为 lit-element 自定义元素。我正在使用 Firefox(最新)进行测试。我正在尝试在自定义元素的 shadowDom 中选择内容可编辑元素(在方法中)。
这个问题在这里已经有了答案: How to access host element from within the shadow root using Shadow DOM v1? (2 个答案)
我无法理解何时可以访问组件的 shadowRoot。这是一组嵌套组件的图像: 所以有一些组件: MortgageDetails:将一组 3 个其他组件绑定(bind)在一起的组件 MoneyInput
我在测试上下文中对 shadowroot 中的元素执行操作时遇到困难。假设我有一个 Web 组件 它包含一个按钮 从 chrome 控制台,我可以执行以下操作: document.getElement
所以我有这个角 Dart 组件: @Component(...) class TableCard implements AttachAware, ShadowRootAware { void on
我在访问 Polymer 元素的 shadowDom 时遇到问题。这是元素的(截断)代码: Drag and drop the letters to form anagrams
Chrome 中的谷歌翻译扩展,具有弹出功能,它会立即显示所选单词的翻译,我想访问弹出显示的那些翻译,但是这个弹出元素是 shadowRoot("closed"),所以 javascript 无法访问
在下面的示例中,我尝试创建一个菜单组件来试验组件层次结构。 index.html Sample Menu App
我正在尝试访问元素上的 ShadowRoot,属性 element.shadowRoot 返回 null。 ShadowDOM 定义为 mode: 'open',这是正确的,我什至可以通过 conso
我正在使用 Jest 设置 Vue3 和单元测试。 我已经不得不努力让它工作,并且我已经尝试了很多不同的配置。 这是我最后一次“工作”配置,我得到了这个错误: ReferenceError: Shad
我正在尝试使用以下内容读取元素的值 (innerHTML/innerText) 属性,但我得到一个空字符串。cy.get('#INGLoanRequests-container').shadow().
我正在尝试访问 ShadowRoot dom 树元素,但我面临的问题是我无法使用特定的 html 元素来调用 .ShadowRoot,因为该元素是动态的(请参见下面的 html 片段 id="vaad
我正在创建一个自定义元素并将其 shadowRoot 设置为包含其他自定义元素,这会引发 NotSupportedError (DOM Exception 9): A newly constructe
我尝试截取 AMP Stories 的屏幕截图,但不使用声音和分享按钮。 当我发现有一个叫做shadow DOM的东西之后,我想知道如何在那里设置显示:无: addStyleTag({content:
好的,所以我在这里看到了一些与我的问题类似的问题,但没有一个解决方案对我有用,所以我认为最好更具体地描述我的问题。 我正在使用 Web 组件,起初我没有使用 lit 元素,当时 this.shadow
我有一个非常简单的网站,类似于 jsfiddle .一切似乎都很好,但在我的本地,但是当我停在第一行 JS 时(在声明自定义元素之前)我可以看到没有格式的 div ...... T
我是一名优秀的程序员,十分优秀!