簡體   English   中英

使用指令注入DOM元素AngularJS

[英]Injecting DOM elements AngularJS using Directives

我也有一個<ul><li>

    <li ng-repeat="x in xs" ng-class-odd="'x'" ng-class-even="'y'">
    // inject here
        <span>
            {{x.v}}
        </span>
    </li>

我想在某個事件中注入如下所示的上下文菜單(上述DOM位置):

        <ul id="context" class="col">
            <li class="three"><span>1</span></li>
            <li class="three"><span>2</span></li>
            <li class="three"><span>3</span></li>
        </ul>

實現此目的的最佳方法是什么? 上面的1、2和3具有相同的功能來處理父容器中的重復列表項。 因此,我不確定如上所述注入上下文菜單是否明智,因為這會生成上下文菜單的非種子重復。

謝謝。

這是一組contextmenu指令的非常基本的示例,其中菜單一次插入到正文中。

一個指令用於綁定contenxtmenu事件,並將數據發送到控制菜單本身的指令。

所選項目和鼠標位置作為數據在廣播中傳遞

HTML

  <ul>
    <li ng-repeat="item in items" context="item">{{item.title}}</li>
  </ul>

  <ul menu id="context" ng-show="menu_on">
    <li ng-click="itemAlert('id')">Alert ID</li>
    <li ng-click="itemAlert('title')">Alert Title</li>
  </ul>

JS

app.directive('context', function($rootScope) {
  return {
    restrict: 'A',
    scope: {
      item: '=context'
    },
    link: function(scope, elem) {
      elem.bind('contextmenu', function(evt) {
        evt.preventDefault();
        var data = {
          pos: { x: evt.clientX, y: evt.clientY},
          item: scope.item
        }
        scope.$apply(function(){
          $rootScope.$broadcast('menu', data);
        });

      });
    }
  }
})

 app.directive('menu', function($rootScope) {
  return {
    restrict: 'A',
    link: function(scope, elem) {
      scope.$on('menu', function(evt, data) {
        scope.menu_on = true;
        scope.item = data.item;
        var cssObj = {
          left: data.pos.x + 20 + 'px',
          top: data.pos.y - 40 + 'px'
        };
        elem.css(cssObj)
      });
      scope.itemAlert = function(prop) {
        scope.menu_on = false;
        alert(scope.item[prop])
      }
    }
  }
});

當用戶在菜單外單擊時,將需要一些其他文檔偵聽器來關閉菜單。 這里的目標是創建能夠顯示菜單和傳遞數據的基本機制。

我沒有看過,但是可能已經有一些開源指令比這更先進。

DEMO

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM