微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – AngularJS Direcitve – 链接功能不会触发

我想要实现的目标:
一个角度指令内包装cordova本地处理程序

我想使用指令包装器为Cordova的本机事件实现处理程序(以便监听body load事件).

我有以下指令样板:

angular.module('vitaApp')
  .directive('cordovaNative', function () {
    return {
      restrict: 'A',
      compile: function (element, attrs, transcludeFn) {
          alert('compile fired');
         element.bind('load', function(){
              alert('load occured');
          });
      },
      link: function postLink(scope, element, attrs) {
          alert('link fired');
          element.bind('load', function(){
              alert('load occured');
          });
      }
    };
  });

以下列方式实例化:

<body ng-app="vitaApp"  ng-controller="MetaCtrl" ng-swipe-right="showMenu()"  ng-swipe-left="hideMenu()" cordova-native>

编译cordovaNative指令的函数会触发,但链接函数却没有.

它可能与ng-swipe指令有关(例如'{terminal:true}’)?

注意:我不是试图一起使用编译和链接,我试图证明它们不是为了单独订阅加载事件而工作.

解决方法:

您不能在指令中同时具有编译和链接功能.如果使用编译,则应返回一个函数,该函数本身就是一个链接函数.所以上面的代码变成:

 compile: function (elem, attrs, transcludeFn) {
          alert('compile fired');
          return function(scope, element, attrs) {
             alert('link fired');
             element.on('load', function(){
                alert('load occured');
             });
          }
      },

更新:由于指令链接函数在加载元素后运行(大多数情况下),可能不需要在指令链接函数添加元素加载事件处理程序.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐