Контроллер AngularJS не вызывается из html

#angularjs #controller

#angularjs #контроллер

Вопрос:

Если кто-нибудь может помочь, я был бы очень благодарен. Я довольно новичок в AngularJS и пытаюсь его изучить. Проблема, с которой я столкнулся, заключается в том, что один из контроллеров не вызывается при нажатии купленной кнопки

 <div class="col-md-6" ng-controller="AlreadyBoughtController as Items">
                <h2>Already Bought:</h2>
                <ul ng-repeat="bought in Items.ItemsBought track by $index">
                    <li>Bought {{bought.quantity}} {{bought.name}}</li>
                </ul>
                <div class="emptyMessage" ng-if="Items.ItemsBought.length === 0">Nothing bought yet.</div>
            </div>. 
  

Пожалуйста, посмотрите полный код с app.js файл на plunker:
http://plnkr.co/edit/8wKY7PPZ6mINsFGCJQfP?p=preview

Комментарии:

1. Вы можете отладить это, поместив {{ Items }} где-нибудь под тем, где вы определяете AlreadyBoughtController as Items — вы увидите, что CTRL на самом деле загружается нормально, но добавление «купленного» элемента отображается как null. embed.plnkr.co/Mhoa50ClNcbOPbC1D2Py В вашей реализации возникает ошибка при добавлении купленных товаров.

2. Да, я вижу это, но мне нужно, чтобы кто-нибудь объяснил мне, почему он отображается как null и что я делаю неправильно. Спасибо

Ответ №1:

Это потому, что вы на самом деле никогда не передавали индекс купленного вами товара.

 <li>Buy {{item.quantity}} {{item.name}} <button class="btn btn-default" ng-click="itemsToBuy.boughtItems($index);"><span class="glyphicon glyphicon-ok"></span> Bought</button></li>
  

Передайте $index вашей функции: ng-click="itemsToBuy.boughtItems($index);

Взгляните на исправленный сбой.

Комментарии:

1. Аникет, большое тебе спасибо. Я знал, что это должно быть что-то простое, но я не мог понять. Еще раз большое спасибо.

2. Ничто не говорит спасибо лучше, чем принятый ответ / одобрение. 🙂