Проблемы с поиском в угловой директиве

0

Я пытаюсь использовать фильтр углового поиска следующим образом и не могу понять, что я делаю неправильно.

Это приложение должно иметь возможность использовать вход поиска для поиска всех названий производителей и элементов из контроллера.

Я знаю, что он работает некорректно, потому что в моем браузере отображается изображение и имя производителя. Оба объекта: производитель1 и производитель2, но он не показывает элементы, и функция поиска не работает.

Помощь очень ценится! Я новичок в Angular.

<div ng-controller="SearchCtrl">        

    <input type="search" ng-model="search" class="form-control" placeholder="Search Manufacturers, Solutions, Equipment, Etc.">    

    <manufacturer info="manufacturer1"></manufacturer>
    <manufacturer info="manufacturer2"></manufacturer>

</div>

контроллер:

app.controller('SearchCtrl', ['$scope', function ($scope) {
$scope.manufacturer1 = {
    name: 'Business Name',
    items: [
        'service1',
        'service2',
        'service3'
    ],
    image: 'assets/images/image.png'
};
$scope.manufacturer2 = {
    name: 'Other Business',
    items: [
        'product1',
        'product2',
        'product3'
    ],
    image: 'assets/images/image.png'
};
}]);

Директива JS

app.directive('manufacturer', function() {
return {
    restrict: 'E',
    scope: {
        info: '='
    },
    templateUrl: 'assets/js/directives/manufacturer.html'
};
});

Шаблон директивы:

<div class="col-md-4">
    <h2 class="business-title">{{ info.name }}</h2>
    <img ng-src="{{ info.image }}" class="feature-img" alt="image"/>
    <ul>
        <li ng-repeat="item in items | filter:search">
            {{ info.items }}
        </li>
    </ul>
</div>

1 ответ

0
Лучший ответ

Поскольку директива manufacturer имеет изолированную область видимости, поэтому у вас не может быть доступа к переменной search внутри вашей директивы, вам необходимо передать переменную search в директиву из attribute директивы & включить это свойство внутри выделенной области действия, как это было сделано для info переменная.

В основном вам нужно добавить serach: '=' внутри вашей выделенной области директивы, которая передаст значение поля ввода search в директиву, используя search="search" атрибута search="search". = используется для двусторонней привязки для обновления результата поиска, так как пользователь будет изменять вход, информация будет автоматически фильтроваться.

наценка

<input type="search" ng-model="search" class="form-control" placeholder="Search Manufacturers, Solutions, Equipment, Etc.">    
<manufacturer info="manufacturer1" search="search"></manufacturer>
<manufacturer info="manufacturer2" search="search"></manufacturer>

директива

app.directive('manufacturer', function() {
  return {
    restrict: 'E',
    scope: {
        info: '=',
        search: '='
    },
    templateUrl: 'assets/js/directives/manufacturer.html'
  };
});

Обновить

У вас неправильный html внутри вашего файла manufacturer.html, в частности контент, показывающий элементы с использованием ng-repeat

<ul>
    <li ng-repeat="item in info.items | filter:search">
        {{ item }}
    </li>
</ul>

Demo Plunkr

  • 0
    Спасибо, но я попробовал это, и это не сработало.
  • 0
    @LanceBeaudry имел опечатку в search ..previously это serach
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню