javascript - 如何制作一个包含 ng-repeat 中使用的 div 的指令?

标签 javascript angularjs angularjs-directive

我的应用程序使用此 HTML 执行 ng-repeat :

    <div class="gridBody">
        <div ng-class="{clicked: row.current == true}"
             ng-click="home.rowClicked($index)"
             ng-dblclick="ctrl.rowDoubleClicked(row)"
             ng-repeat="row in home.grid.view = (home.grid.data | orderBy:ctrl.examOrderBy[ctrl.configService.admin.examOrderBy].key:ctrl.configService.admin.examSortDirection) track by row.examId">

我了解如何执行模板指令,但我不确定是否可以执行一个指令来调用另一个指令,就像这里调用 ng-repeat 一样。 。我怎样才能创建一个指令来允许我像这样调用这个代码块:

    <div grid-body
         order="ctrl.examOrderBy[ctrl.configService.admin.examOrderBy].key"
         direction="ctrl.configService.admin.examSortDirection)"
         track="examId">

基本上我想要一个结合了两个 <div> 的指令以上合为一。我想我需要一个使用 transclude 但我不确定如何使用 transclude 并且我找不到任何类似这样的例子。

最佳答案

你真正想做的是隔离范围

检查我的 Plunker

与您的代码类似,我使用 ng-repeat:

<div employeeform ng-repeat="emp in emplList" passed-model="emp">
</div>

employeeform 是我的属性指令。它是用自己的隔离范围和 Controller 定义的:

empApp.directive('employeeform', [
  function($compile) {

    function RowController($scope) {
      $scope.smyClass = "none";
      $scope.clickMe = function() {
        if ($scope.smyClass == "none") {
          $scope.smyClass = "clicked";
        } else {
          $scope.smyClass = "none";
        }
      };    
    }

    return {
      restrict: "A",
      controller: RowController,
      replace: true,
      scope: {
        passedModel: '='
      },
      templateUrl: "Employee.html"
    };
  }
]);

模板 Employee.html 引用了 Controller 的本地作用域函数和 smyClass 属性:

<div class="{{smyClass}}" ng-click="clickMe()" >
  <div style="display:inline-block; width: 100px;">{{ passedModel.name }}</div>
  <div style="display:inline-block; width: 100px;">{{ passedModel.position }}</div>
  <div style="display:inline-block; width: 100px;">{{ passedModel.salary }}</div>
</div>

由于我没有您的数据和其他来源,因此我创建了一个简单的表格报告。当您单击任何行时,背景会变成黄色。当您取消单击每一行时,它会恢复为正常的白色。这是我模拟点击和取消点击的方式。

摘要:

当指令具有定义的本地范围时:

  scope: {
    passedModel: '='
  },

除了传递的参数(例如passedModel)之外,它与父作用域没有任何共享。这使您可以自由地使用局部变量来定义该特定行(指令)的类。

关于javascript - 如何制作一个包含 ng-repeat 中使用的 div 的指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25709749/

相关文章:

java - 用于访问服务器文件系统的 HTML 文件打开对话框

javascript - 装饰重新渲染

JavaScript:停止事件传播对性能有什么好处吗?

javascript - 为什么 ng-click 不能在动态 html 内容中工作?

javascript - 为什么我的 AngularJS 指令共享作用域?

javascript - 尝试使用双向数据绑定(bind)使用指令中的自定义代码更改 Material md-selected 选项卡

javascript - 接受字符串的 Angular 指令

javascript - Emit 未在 VueJS 中注册?

angularjs - Angular.js ng-switch ---测试值是否为空或未定义

angularjs - 在 Angular 1.5 中,如何将属性组件绑定(bind)为 bool 值?