首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

单击事件在innerhtml字符串angular 6中不起作用

单击事件在innerHTML字符串中不起作用是因为innerHTML会将字符串中的HTML代码解析并插入到DOM中,但是事件处理程序不会被解析和执行。这是由于innerHTML只是简单地将字符串作为HTML插入到指定元素中,而不会重新编译和绑定事件。

解决这个问题的方法是使用事件委托或者手动绑定事件。事件委托是将事件绑定到父元素上,然后通过事件冒泡机制来触发子元素的事件处理程序。这样即使子元素是通过innerHTML插入的,事件仍然可以正常触发。

以下是一个示例代码:

代码语言:txt
复制
// 使用事件委托
document.addEventListener('click', function(event) {
  if (event.target && event.target.matches('.clickable-element')) {
    // 处理点击事件的逻辑
  }
});

// 手动绑定事件
var element = document.createElement('div');
element.innerHTML = '<button class="clickable-element">Click me</button>';
document.body.appendChild(element);

var button = document.querySelector('.clickable-element');
button.addEventListener('click', function() {
  // 处理点击事件的逻辑
});

在上述示例中,我们通过事件委托将点击事件绑定到document上,并通过判断目标元素的类名来确定是否是需要处理的元素。另外一种方法是手动创建元素并绑定事件处理程序。

对于Angular 6中的情况,可以使用Angular的事件绑定语法来解决这个问题。在组件的模板中,可以使用(click)来绑定点击事件,而不是直接使用innerHTML插入HTML代码。

代码语言:txt
复制
<div [innerHTML]="htmlString" (click)="handleClick()"></div>

在上述示例中,我们使用属性绑定将HTML字符串绑定到div元素的innerHTML属性上,并使用(click)来绑定点击事件。这样就可以确保点击事件可以正常触发。

总结起来,单击事件在innerHTML字符串中不起作用是因为innerHTML不会重新编译和绑定事件。解决这个问题的方法可以是使用事件委托、手动绑定事件或者使用Angular的事件绑定语法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

AngularDart4.0 指南- 模板语法一 顶

快速执行 Angular每个更改检测周期后执行模板表达式。 更改检测周期由许多异步活动触发,如承诺的分辨率,http结果,计时器事件,按键和鼠标移动。...事件循环的一个回合期间,依赖值不应该改变。如果一个幂等表达式返回一个字符串或一个数字,当它在一行中调用两次时会返回相同的字符串或数字。...它是一个事件的全部。 就是如何从用户操作更新应用程序状态。 响应事件Angular的“单向数据流”的另一面。事件循环的这个周期中,您可以自由地在任何地方进行所有更改。...当你写数据绑定时,你只处理目标对象的属性(properties)和事件(events)。 HTML属性(attributes)不起作用。 记住这个模型,继续阅读以了解绑定目标。...记住括号 括号告诉Angular评估模板表达式。 如果省略方括号,Angular会将该字符串视为常量,并使用该字符串初始化目标属性。 它不评估字符串! 不要犯以下错误: <!

5.2K10
  • 干货 | 前端模板引擎知多少

    可方便地实现数据绑定、事件绑定等功能。 4. 为虚拟DOM Diff过程打下铺垫。 3  数据绑定捕捉 这里我们拿来做例子的是,Angular和Vue里面都有,是双大括号的数据绑定的语法。...当然,即使字符串模版,我们也可以遍历一遍binding来获取所有绑定数据的节点并保存,这样就不用每次数据更新事件触发的时候重新进行获取,毕竟DOM节点的匹配也是会有一定的消耗的。 3....脏检测:Angular中,并不直接监听数据的变动,而是监听常见的事件如用户交互(点击、输入等)、定时器、生命周期等。...每次事件触发完毕后,计算数据的新值和旧值是否有差异,若有差异则更新页面,并触发下一次的脏检测,直到没有差异或是次数达到设定阈值。 脏检测是Angular的一大特色。...同时,Angular2中应用的组织类似DOM,也是树结构的,脏检查会从根组件开始,自上而下对树上的所有子组件进行检查。相比Angular1中的带有环的结构,这样的单向数据流效率更高,而且容易预测。

    1.1K30

    关于前端模板引擎

    可方便地实现数据绑定、事件绑定等功能。为虚拟DOM Diff过程打下铺垫。数据绑定捕获这里我们拿来做例子的是, Angular 和 Vue 里面都有,是双大括号的数据绑定{{ data }}的语法。...当然,即使字符串模版,我们也可以遍历一遍binding来获取所有绑定数据的节点并保存,这样就不用每次数据更新事件触发的时候重新进行获取,毕竟 DOM 节点的匹配也是会有一定的消耗的。3....脏检测: Angular 中,并不直接监听数据的变动,而是监听常见的事件如用户交互(点击、输入等)、定时器、生命周期等。...每次事件触发完毕后,计算数据的新值和旧值是否有差异,若有差异则更新页面,并触发下一次的脏检测,直到没有差异或是次数达到设定阈值。脏检测是 Angular 的一大特色。...同时, Angular2 中应用的组织类似 DOM,也是树结构的,脏检查会从根组件开始,自上而下对树上的所有子组件进行检查。

    32520

    AngularDart4.0 英雄之旅-教程-08HTTP 顶

    注意:除非您有适当配置的后端服务器(或模拟服务器),否则此应用程序不起作用。 下一节将展示如何模拟与后端服务器的交互。...更新英雄的细节 尝试英雄详情视图中编辑英雄的名字。 当你输入时,英雄的名字视图标题中被更新。 但是,如果您单击后退按钮,更改将丢失。 更新之前没有丢失。 什么改变了?...添加保存英雄详情的能力 英雄细节模板的末尾,添加一个保存按钮,其中包含一个点击事件绑定,调用一个名为save()的新组件方法。...delete" (click)="delete(hero); $event.stopPropagation()">x 除了调用组件的delete()方法之外,删除按钮的单击处理程序代码会停止单击事件的传播...示例中,基础的字符串流(_searchTerms.stream)表示由用户输入的英雄名称搜索模式。 每次调用search()都会通过调用控制器上的add()将新的字符串放入流中。

    11K30

    AngularDart4.0 指南- 用户输入 顶

    本节介绍如何绑定到输入框的按键事件,以每次按键后获取用户的输入。 下面的代码监听一个keyup事件,并将整个事件有效载荷($ event)传递给组件事件处理程序。...\$EVENT Dart文件中的非原始字符串需要$前面的\。 如果模板位于HTML文件中,请使用$ event而不是\ $event。...当用户按下并释放一个键时,会发生一个键盘事件,而Angular$ event变量中提供一个相应的DOM事件对象,该代码将该代码作为参数传递给组件的onKey()方法。...输入框中输入内容,然后观看每个按键显示更新。 ? 除非你绑定一个事件,否则这根本不起作用Angular仅在应用程序响应异步事件(如击键)时才更新绑定(以及屏幕)。...失去焦点(blur)事件 在前面的示例中,如果用户没有首先按下Enter的情况下单击页面上的其他位置,则输入框的当前状态将丢失。 只有当用户按下Enter时,组件的value属性才会更新。

    3.5K00

    「Web编程API」- 03

    事件侦听注册事件 addEventListener // (1) 里面的事件类型是字符串 必定加引号 而且不带on // (2) 同一个元素 同一个事件可以添加多个侦听器(事件处理程序)...那么是先执行父元素的单击事件,还是先执行div的单击事件 ???...比如:我们给页面中的一个div注册了单击事件,当你单击了div时,也就单击了body,单击了html,单击了document。 当时的2大浏览器霸主谁也不服谁!...常情况下terget 和 this是一致的,但有一种情况不同,那就是事件冒泡时(父子元素有相同事件单击子元素,父元素的事件处理函数也会被触发执行),这时候this指向的是父元素,因为它是绑定事件的元素对象...什么是事件委托 把事情委托给别人,代为处理。 事件委托也称为事件代理, jQuery 里面称为事件委派。 说白了就是,不给子元素注册事件,给父元素注册事件,把处理代码父元素的事件中执行。

    1.4K50

    AngularDart4.0 英雄之旅-教程-07路由 顶

    您没有向模板添加英雄详情链接,因为用户单击导航链接不是为了查看特定的英雄; 而是点击一个英雄的名字,不管名字是显示仪表板还是英雄列表中。...要在其他地方导航,用户可以单击AppComponent中的两个链接之一,或单击浏览器的后退按钮。...您将使用绑定到后退按钮的事件连接此方法,您将添加到组件模板。...查看详细信息按钮不起作用。 更新HeroesComponent类 响应按钮单击,HeroesComponent导航到HeroesDetailComponent。...按钮的点击事件绑定到一个gotoDetail()方法,该方法应该通过告诉路由器去哪里命令性地导航。 这种方法需要对组件类进行以下更改: 导入angular_router。

    17.6K30

    前端成神之路-WebAPIs03

    事件侦听注册事件 addEventListener // (1) 里面的事件类型是字符串 必定加引号 而且不带on // (2) 同一个元素 同一个事件可以添加多个侦听器(事件处理程序)...那么是先执行父元素的单击事件,还是先执行div的单击事件 ??? ?...比如:我们给页面中的一个div注册了单击事件,当你单击了div时,也就单击了body,单击了html,单击了document。 ? 当时的2大浏览器霸主谁也不服谁!...事件对象的使用 事件触发发生时就会产生事件对象,并且系统会以实参的形式传给事件处理函数。 所以,事件处理函数中声明1个形参用来接收事件对象。 ?...常情况下terget 和 this是一致的, 但有一种情况不同,那就是事件冒泡时(父子元素有相同事件单击子元素,父元素的事件处理函数也会被触发执行), 这时候this指向的是父元素,因为它是绑定事件的元素对象

    3K20

    进阶 | 重新认识Angular

    String-based 模板技术 基于字符串的parse和compile过程: 字符串模板强依赖于innerHTML(渲染), 因为它的输出物就是字符串。 2....首先我们使用一个内建DSL来解析模板字符串并输出AST。 结合特定的数据模型(regularjs中,是一个裸数据), 模板引擎层级游历AST并递归生成Dom节点(不会涉及到innerHTML)。...你必然通过innerHTML来获得初始Dom结构....依赖注入与状态管理 状态管理: Angular:依赖注入服务来共享一些状态 其他框架(React/Vue)的状态管理:组件传递、bus总线、事件传递、状态管理工具Redux/Flux/Vuex 其实像我们设计一个项目...而Angular某种程度上替我们做了这样的工作,并提供我们使用。 Angular里面我们常常通过服务来共享一些状态的,而这些管理状态和数据的服务,便是通过依赖注入的方式进行处理的。

    2.6K10

    如何使用WijmoJS 纯前端设计器,快速生成 Angular 应用

    用户设计器中进行更改后,只需单击一下,就可以使用修改后的Angular标记更新原始HTML文件。...我们的示例中,操作是单独的选项卡中打开设计图面,并使用 Angular标记提供的上下文,以及源文件中该标记的位置。 现在单击链接以相邻选项卡中打开设计器。...“属性”窗格中找到columns属性,然后单击属性编辑器右侧的“显示项目”按钮以显示Angular标记中定义的八个列。 将鼠标悬停在单词“author”上,然后单击出现的链接。...单击axisY属性的齿轮图标,然后将format属性设置为字符串c0,表示零小数位的货币值。 单击“属性”窗格中的“后退”按钮以返回FlexChart的设置。...保存操作期间保留绑定事件; 但是,设计器中没有用于创建或编辑它们的界面。 有关Angular标记的当前限制列表,请参阅Visual Studio Marketplace上的扩展页面。

    5.4K40

    Web Components 初探

    例如,如果我编写一个Angular库并想在我的Vue应用程序中使用我的Angular下拉列表,目前还无法直接做到。...我们的组件是一个简单的计数器组件,当有单击操作时实现数字加减。 为了制作我们的计数器组件,将介绍三种不同的API,Custom Elements,Templates 和Shadow DOM API。...我们的自定义类中,可以定义模板和我们想要的任何行为。特定生命周期的钩子函数connectedCallback()中,我们将模板赋值给节点的innerHTML属性。...我们通过Shadow DOM API而不是之前的innerHTML示例添加我们新创建的template。通过Shadow DOM API将模板添加到我们的组件,我们构造函数中添加如下代码。...接下来,我们将介绍自定义事件。 Events 就像任何HTML节点一样,我们的自定义节点可以发出自定义事件供我们监听。我们例子中,我们想知道用户何时更新了计数器组件的值。我们来看看组件值的更新。

    2.7K40

    vue2.0知识点汇总

    Vue简介 2014年诞生,2013年react,09年angularjs 作者: 尤雨溪 核心概念: 组件化 双向数据流(基于ES5中的defineProperty来实现的),IE9才支持 angular...用在自定义元素组件上时,也可以监听子组件触发的自定义事件监听原生 DOM 事件时,方法以事件为唯一的参数。.../xxx.vue'; // 声明子组件 components: { // 组件名(模板中使用): 组件对象 } 全局组件,使用更为方便,不需要引入和声明直接使用 main.js中引入异常,main.js...$el.innerHTML = '哈哈'; // 获取vue组件对象对应的DOM对象 console.log(this....$route.params.id 编程式导航 不能保证用户一定会单击某些按钮 并且当前操作除了路由跳转以外,还有一些别的附加操作 this.

    6.6K70

    从单向到双向数据绑定

    中单向数据的小例子,首先我们on里面加入事件a,回调是a.innerHTML = str,然后我们可以改变model层的时候,顺便触发一下(emit(‘a’)),不就可以做到M->V的反映了吗?...a.innerHTML = x }) Object.defineProperty(data,'str',{ set:function(newval){//当data.str被设置的时候,触发事件change...脏值检测(代表:angular1) 前面说的定时器双绑是扯淡 前面特地埋了个坑,关于Angular脏检查,并不是一些人想象的那样子用定时器周期性进行脏检测(我前面写的那个超级简单的双绑就是人们传闻的angular...而我们前面的vue,当我们控制台改了数据,就可以马上反映到v层。angular并没有这个操作,也没有意义。...angular的处理办法是 $scope.prototype.

    3.6K20

    脏值检测(代表:angular1)前面说

    中单向数据的小例子,首先我们on里面加入事件a,回调是a.innerHTML = str,然后我们可以改变model层的时候,顺便触发一下(emit(‘a’)),不就可以做到M->V的反映了吗?...a.innerHTML = x }) Object.defineProperty(data,'str',{ set:function(newval){//当data.str被设置的时候,触发事件change...脏值检测(代表:angular1) 前面说的定时器双绑是扯淡 前面特地埋了个坑,关于Angular脏检查,并不是一些人想象的那样子用定时器周期性进行脏检测(我前面写的那个超级简单的双绑就是人们传闻的angular...而我们前面的vue,当我们控制台改了数据,就可以马上反映到v层。angular并没有这个操作,也没有意义。...angular1中,私有变量以$$开头,$$watch是一个存放很多个绑定的对象的数组,用$watch方法来添加的,每一个被绑定的对象属性是:变量名、变量旧值、一个函数(用来返回变量新值)、检测变化的回调函数

    1.6K40

    【JS】328- 8个你不知道的DOM功能

    ('click',doSomething,false); 第一个元素是我们要监听的事件,第二个元素是事件触发时的回调函数,第三个参数是一个布尔值用来标识事件捕获还是冒泡阶段触发。...这些节点是单个文本字符串,但由于文本是动态附加的,因此它们被视为单独的节点。 某些情况下,将文本视为单个文本节点会更有用,这可以使得文本更容易操作。...例如,您可能希望截获对 元素的单击,并使用 javascript 处理这些单击。...我将 blur 和 focus 包括在内,以证明这些不符合条件,并且始终返回0(即不单击) 像IE11这样的老浏览器有非常不一致的行为 请注意,该演示包含了一个很好的用例,用于演示-模拟三次单击事件的能力...; } }, false); 如果所有浏览器的点击次数都超过三次,那么您也可以检测到更高的点击次数,但我认为大多数情况下,三次点击事件就足够了。

    1.4K10

    jquery对象和dom对象的相互转换

    $("#msg").click(fn);   //为id为msg的元素单击事件添加函数 同样blur,focus,select,submit事件都可以有着两种调用方法 5、集合处理功能 对于jquery...Jquery已经为我们提供了各种事件处理方法,我们无需html元素上直接写事件,而可以直接为通过jquery获取的对象添加事件。...=['#f00','#0f0','#00f'][i]}) //为三个不同的p元素单击事件分别设定不同的处理 jQuery中几个自定义的事件: (1)hover(fn1,fn2):一个模仿悬停事件(鼠标移动到一个对象上面...addClass("selected");    },function(){ $(this).removeClass("selected");  }); (4)trigger(eventtype): 每一个匹配的元素上触发某类事件...p元素上的所有事件 $("p").unbind("click")   //删除所有p元素上的单击事件 10、几个实用特效功能 其中toggle()和slidetoggle()方法提供了状态切换功能。

    3.3K40
    领券