Как использовать ng-repeat внутри директивы надлежащим образом в angularjs

0

Plunkr

Я сделал раскрывающийся список автозаполнения, используя угловую пользовательскую директиву. Все работает нормально. Но я хочу сделать эту директиву повторно используемой !!!!

В настоящее время моя директива сильно зависит от свойств Id и Name выбранного элемента.

Я хочу назначить текстовое свойство (которое я хочу связать текст с элементами списка html) и значение value (которое будет доступно в моем контроллере приложений), например textfield = "Name" и value-field = "Id".

Представьте, что если мой объект данных не содержит свойства Name или Id, моя директива не будет работать.

HTML:

<autofill-dropdown items="searchCurrencies"
   textfield="Name" valuefield="Id" selected-data="Id" urllink="/api/SetupCurrency/Autofill?filter=">
</autofill-dropdown>

Шаблон:

<div class="pos_Rel">
   <input placeholder="Search Currency e.g. doller,pound,rupee" 
     type="text" ng-change="SearchTextChange()" ng-model="searchtext" 
     class="form-control width_full" />

   <ul class="currencySearchList" ng-show="IsFocused && items.length">
      <li class="autofill" ng-repeat="item in items" ng-click="autoFill(item)">
         {{item.Name}}
      </li>
   </ul>
</div>

Итак, наконец, что я хочу выполнить, я собираюсь связать свойство Name (или другое, зависит от того, какое значение я присвоил атрибуту "text-field" на мой html), в listitems и всякий раз, когда пользователь выбирает элемент, он будет давать мне выбранный Id (или другое свойство, зависит от того, какое значение я присвоил атрибуту value-field на моем html).

Plunkr Здесь

Обновить:

Я думаю, что мой вопрос не так ясен. Я написал одну и ту же директиву 2 раза, чтобы выполнить, а также 2 раза такой же шаблон :( Пожалуйста, просмотрите мой обновленный plunkr.

Обновлено Plunkr

Теги:
angularjs-scope
angularjs-directive

1 ответ

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

Я хочу сказать, что я не уверен, если я правильно понял ваш вопрос, поэтому я пытаюсь повторить его.

textfield="Name" valuefield="Id" selected-data="Id"
  1. Вы хотите сохранить значение свойства выбранного элемента своей настраиваемой директивы.
  2. Значение должно храниться в переменной, указанной в атрибуте "текстовое поле"
  3. Атрибут "поле значения" должен определять имя свойства выбранного объекта

Если это так, вам нужно избавиться от двухсторонней привязки данных для вашего поля значений. Потому что вы хотите только указать строку (например, "Id" или "Name").

Я снова изменил ваш plunkr. Прежде всего я сделал новые переменные области видимости:

scope: {
        'items': '=',
        'urllink':'@',
        'valuefield':'@',
        'textfield':'=',
        'Id':'=selectedData'

    }

Valuefield теперь только привязка текста. Поэтому, если вы хотите изменить его угловым способом, вам нужно предоставить переменную области действия вне директивы и привязку '=' twoway внутри: D

$scope.autoFill = function (item) {
            $scope.IsFocused = false;
            $scope.searchtext = item.Name;
            $scope.Id = item.Id;
            $scope.textfield = item[$scope.valuefield];
        }

Также я добавил последнее выражение к вашей функции автозаполнения. Имя свойства (поле значения) будет записано в переменную текстового поля, которая связана с вашей внешней областью (в данном случае "Имя"):

textfield="Name"

Если это не то, что вы просили, мне жаль, но я новичок в stackoverflow, и я все еще не могу комментировать: P

https://plnkr.co/edit/zE1Co4nmIF3ef6d6RSaW?p=preview

  • 0
    Пожалуйста, просмотрите мой обновленный plunkr ... надеюсь, это может быть понятно.
  • 0
    plnkr.co/edit/YD7PSl?p=preview
Показать ещё 2 комментария

Ещё вопросы

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