如何使用自定义元素点击事件更新范围值?

Posted

技术标签:

【中文标题】如何使用自定义元素点击事件更新范围值?【英文标题】:How to update the scope value using the custom element click event? 【发布时间】:2015-09-14 04:35:49 【问题描述】:

在我的directive 中,我正在根据index 值替换模板。当用户点击模板时,我需要将点击的directive 值分配给scope 值。

我无法在replaced 元素中直接调用scope。这种情况如何处理?

这是我的directive 代码:

var allAppsGallery = function ($compile) 

    return 

        replace : true,

        scope : 
            index : "=",
            app : '='
        ,

        link : function (scope, element, attrs) 

            var getTemplate = function (index, app) 

                switch (index) 

                    case 0  :
                    case 13  :
                    case 14  :
                    case 15  :
                    case 5 :

                        return $('<div />', 
                                    
                                        class:'bgr box'+index,
                                        html : '<h2>'+app.completion+'%</h2><span>'+app.name+'</span>',
                                        click : function () 
                                            alert("hi"); //click works here
                       //but how to update the scope variable?
                                        
                                    
                                );

                        break;


                

            


            element.html(getTemplate(scope.index, scope.app));
            $compile(element.contents())(scope);
            element.replaceWith(element.contents());

            element.click(function(event)  //click event not works.

                scope.activeApp = scope.app; //the new value on click need to update
                scope.$appy();

            );



        

    


这是一个现场演示:

LIVE DEMO FOR TEST

【问题讨论】:

$scope.activeApp = app; 实际上我想在这里更新app。范围变量名称是`$scope.activeApp' 【参考方案1】:

更好的方法是在编译元素之前绑定ng-click

case 5:
    return '<div class="bgr" ng-class="\'box\' + index" ng-click="action()">' +
               '<h2>app.completion</h2><span>app.name</span>'
           '</div>';

...

scope.action = function () 
    scope.activeApp = scope.app;
;

Updated demo

【讨论】:

如你所说已更新,但 ng-click 不起作用。 我已经更新了现场演示。你能看看吗? @user2024080 查看更新的答案和固定的演示:plnkr.co/edit/M9UTmVt6qWW9mBPA5qiR?p=preview

以上是关于如何使用自定义元素点击事件更新范围值?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery实现获取绑定自定义事件元素的方法

高德 ios 自定义气泡添加点击事件无效问题

如何在UILable上添加点击事件

浏览器如何知道哪个元素应该获得点击或悬停事件?

vue怎么触发元素的原生事件

一段简单的代码记录如何通过 js 给 HTML 设置自定义属性,并且通过点击事件获取到所设置的自定义属性值