2016-07-16 29 views
0

私は指示文を持っています。この指示文ではngRepeatのようにコンパイルします。ngRepeatのスコープngClick inコンパイル方法

私は、コントローラから$ scope.delete()を呼び出すことはできません、と私は私の指示でそれをコンパイルすることができますかわからない:

私の問題はです。

注:実行サンプル

 var app = angular.module("app", []); 
 

 
     app.controller("ctrl", function ($scope, $http) { 
 
      var root = "http://jsonplaceholder.typicode.com"; 
 

 
      $scope.list = []; 
 

 
      $http.get(root + "/users").success(function (data) { 
 
       $scope.list = data; 
 
      }); 
 

 
      ///i can't call this scope 
 
      $scope.delete = function (item) { 
 
       alert("delete called"); 
 
      } 
 
     }); 
 

 
     app.directive("mydata", ["$compile", "$filter", function ($compile, $filter) { 
 
      return { 
 
       restrict: "A", 
 
       scope: { 
 
        list: "=" 
 
       }, 
 
       link: function (scope, element) { 
 
        var ngRepeat = element.find(".repeat").attr("ng-repeat", "item in list"); 
 
        $compile(ngRepeat)(scope); 
 
       } 
 
      } 
 
     }]);
<!DOCTYPE html> 
 
<html ng-app="app" ng-controller="ctrl"> 
 
<head> 
 
    <title></title> 
 
</head> 
 
<body> 
 
    <ul id="parent" mydata data-list="list"> 
 
     <li class="repeat"> 
 
      {{item.name}} 
 
      <button ng-click="delete()">delete</button> 
 
     </li> 
 
    </ul> 
 
    
 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
    
 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
    </body> 
 
</html>

答えて

1

uは、このような原料をやろうとしているが、あなたのコードのための迅速な解決をしている理由を知ってはいけませんスコープのディレクティブの代わりにコントローラのスコープでngRepeatをコンパイルします。

$compile(ngRepeat)(scope.$parent); 

あなたの削除()uはあなたのmy-dataディレクティブに分離されたスコープを作成しているので、発生しません。 delete()メソッドは継承されません。分離スコープとスコープの継承についての詳細な概念については

、実際に私は私の動的テーブルにそれを使用したい、それが役立った、https://docs.angularjs.org/guide/directive#isolating-the-scope-of-a-directivehttps://docs.angularjs.org/guide/scope

+0

こんにちは、あなたにTNXを確認してください。 – Maher

関連する問題