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>
1 menjawab
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