У меня есть простое приложение, использующее настраиваемую директиву, но я полностью потерял попытку использовать выделенную область, пожалуйста, посмотрите и скажите мне, что писать, чтобы заполнить пробелы.Директивы AngularJs изолируют область
Что представляет собой приложение?
a) контроллер приложения генерирует элементы menu_list из службы, используя $ http, затем выполняет поиск и возвращает массив foundItems с помощью найденной функции (это все сделано!).
b) директива имеет упорядоченный цикл списка, выбирая найденные элементы и отображая их вместе с кнопкой рядом с каждым элементом, чтобы удалить его, если необходимо (это по-прежнему необходимо).
Что я упускаю:
У меня есть три места в моем directive.html где я комментарий, говоря < - < == Что сказать здесь < < == == ->
также в моей index.html я прокомментировал < - Не уверен, -> , а также в моих app.js прокомментировал < - Не уверен, ->
, пожалуйста, посмотрите на эти 5 мест и сказать мне, что делать!
index.html:
<!doctype html>
<html lang="en" ng-app="NarrowItDownApp">
<head>
<title>Narrow Down Your Menu Choice</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="styles/bootstrap.min.css">
<link rel="stylesheet" href="styles/styles.css">
</head>
<body>
<div class="container" ng-controller="NarrowItDownController">
<h1>Narrow Down Your Chinese Menu Choice</h1>
<div class="form-group">
<input type="text" placeholder="search term" class="form-control" ng-model="searchTerm">
</div>
<div class="form-group narrow-button">
<button class="btn btn-primary" ng-click="found(searchTerm)">Narrow It Down For Me!</button>
</div>
<found-items items="found(searchTerm)"></found-items>
<!-- Not sure -->
</div>
<script src="scripts/angular.min.js"></script>
<script src="scripts/app.js"></script>
</body>
</html>
directive.html:
<div>
<ol>
<li ng-repeat="item in items"><!-- <== What to say here <== <== -->
{{ item.name }}, {{ item.shortName }}, {{item.description}}
<button ng-click="remove">Remove item</button> <!-- <== What to say here <== <== -->
</li>
</ol>
<div class="error" ng-if="foundItem.length">nothing found
</div> <!-- <== What to say here <== <== -->
</div>
app.js:
var app = angular.module('NarrowItDownApp', []);
app.controller('NarrowItDownController', ['$scope', 'MenuSearchService', function($scope, MenuSearchService) {
var $scope = $scope;
$scope.searchTerm = 'soup';
$scope.found = function() {
return MenuSearchService.getMatchedMenuItems($scope.searchTerm);
}
console.log(MenuSearchService.getMatchedMenuItems($scope.searchTerm));
$scope.remove = function(index){
service.removeItem(index);
}
}]);
app.service('MenuSearchService', ['$http', function($http) {
var service = this;
service.getMatchedMenuItems = function(searchTerm) {
searchTerm = searchTerm.toLowerCase();
return $http({
method: 'GET',
url: 'https://davids-restaurant.herokuapp.com/menu_items.json'
})
.then(function(response) {
var result = response.data.menu_items;
console.log('Result: ' + result.length);
var foundItems = [];
result.forEach(function(obj) {
if (searchTerm != '') {
if ((obj.name.indexOf(searchTerm) != -1) || (obj.description.indexOf(searchTerm) != -1)) {
foundItems.push(obj);
}
}
})
console.log('Found Items: ' + foundItems.length)
return foundItems;
}, function(error) {
console.log('Error from $http' + error);
});
}
service.removeItem = function(index){
service.getMatchedMenuItems(index).splice(index, 1);
}
}]);
app.directive('foundItems', function() {
var ddo = {
templateUrl: 'directive.html',
scope: {
items: '<found' // Not sure
}
}
return ddo;
});
Примечание: больной трески e удалить метод позже и обновить вопрос, но пока это не essentail. Спасибо заранее! Обновление: закодирован метод удаления на службе и контроллере.
Есть несколько вещей, чтобы быть честным; службе необходимо вернуть массив элементов, этот массив необходимо передать в директиву через атрибут items, а затем шаблон директивы должен выполнить итерацию по массиву и принять меры на основе каждого элемента. Было бы проще продемонстрировать с помощью jsFiddle ... –
У вас есть область выделения, поэтому для функциональности, такой как события кликов, вам нужно либо привязать эти события, либо обработать их в контроллере в вашей настраиваемой директиве. – Zach
@Neil Hibbert Я верю, что я уже возвращаю массив из метода then –