Saya memiliki arahan, dalam arahan ini kami mengkompilasi ngRepeat seperti yang Anda lihat.

masalah saya adalah :

Saya tidak dapat memanggil $scope.delete() dari controller, dan saya tidak tahu bagaimana mengkompilasinya dalam arahan saya.

Catatan: jalankan sampel

        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>
0
Maher 16 Juli 2016, 13:24

1 menjawab

Jawaban Terbaik

Tidak tahu mengapa Anda mencoba melakukan hal-hal seperti ini, tetapi solusi cepat untuk kode Anda adalah mengkompilasi ngRepeat dengan lingkup pengontrol alih-alih arahan lingkup;

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

Delete() Anda tidak akan aktif karena Anda membuat cakupan terisolasi pada arahan my-data Anda. Metode delete() tidak akan diwariskan.

Untuk konsep lebih lanjut tentang cakupan terisolasi dan pewarisan cakupan, lihat https: //docs.angularjs.org/guide/directive#isolating-the-scope-of-a-directive dan https://docs.angularjs.org/guide/scope

1
MMhunter 16 Juli 2016, 14:10
Hai, tnx to you, itu sangat membantu, sebenarnya saya ingin menggunakannya di tabel dinamis saya.
 – 
Maher
16 Juli 2016, 14:16