【问题标题】:Can't add ngClick to attribute directive无法将 ngClick 添加到属性指令
【发布时间】:2016-06-14 03:32:12
【问题描述】:

我想将ngClick 动态添加到属性指令中。

javascript

angular.module('app')
  .directive('myDirective', ['$log', function ($log) {
    return {
      restrict: 'A',  // PAY ATTENTION TO THIS LINE
      compile: function (tElement) {
        tElement.attr('ng-click', 'onClick()');
        return function postLink(scope) {
          scope.onClick = function () {
            $log.debug('myDirective is clicked');
          }
        }
      }
    }
  }]);

标记

<button my-directive>Click Me</button>

从 Chrome 的元素检查器中,我可以看到按钮添加了 ng-click 属性。

我希望在单击按钮时在控制台中看到文本 "myDirective is clicked.",但实际上没有打印任何内容。不会引发错误。任何人都可以帮忙吗?提前致谢。

【问题讨论】:

标签: angularjs angularjs-directive


【解决方案1】:

编译里面不用link直接使用link函数如下图

link: function(scope, element, attrs) {
element.onClick(function(){
      $log.debug('myDirective is clicked');
});
}

您可以直接将点击处理程序添加到元素,您不需要在指令中绑定ng-click指令。

【讨论】:

  • 这对我有用!我的指令使用控制器而不是链接器,所以我把代码放在那里,但它的工作原理是一样的。请注意,这不会向元素添加任何属性,因此您不一定会在 DOM 检查器中看到 click 事件
  • 在 AngularJS 版本 1.4.6 上,onClick 不起作用(出现“不是函数”错误)。我不得不使用element.on('click', function () {
【解决方案2】:

你好,请试试这个,

HTML:

<div ng-app="angularApp">
    <div ng-controller="dirCtrl1">
        <button ng-click="clickFun('clicked')">Button</button>
        <button my-directive="directive">With directive</button>
    </div>
 </div>

JS:

.controller('dirCtrl1', function ($scope) {
    $scope.clickFun = function (msg) {
        console.log(msg);
    };
})
.directive('myDirective', function(){
      return{
           restrict: 'A',
           link: function(scope, ele, attr){
                var eventName = attr.evetName || 'click';
                var mas = attr.myDirective || 'just console';
                ele.on(eventName, function(){
                   console.log(mas); 
                });
           }
      };
});

【讨论】:

  • 所以没有纯角度的方式来解决这个问题,只能求助于jQuery或者jqlite吧?
  • @Aetherus 不,这不像你可以用角度来做,因为我已经写了它的代码,你可以在这里看到它jsfiddle.net/jigardafda/w9w65tk7/1
猜你喜欢
  • 2023-03-24
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-01
  • 1970-01-01
相关资源
最近更新 更多