повторить отправку увидеть данные из внешнего клика

0

Я не понимаю, почему ng-click над циклом может фильтровать данные, а ng-click внутри первого цикла - нет.

Я полностью не знаю, что не так

var booksAPP = angular.module('booksAPP', []);

    booksAPP.controller('booksCTRL', function($scope) {
        $scope.bookData = {
            books: [
                {name: "JS learn", tag: "js", category: "javascript"},
                {name: "PHP learn", tag: "php", category: "php"},
                {name: "JS Ninja", tag: "js", category: "javascript"},
                {name: "HTML Ninja", tag: "html", category: "HTML"}
            ]
        };

        $scope.bookTAG = {
            tags: [
                {name: 'js'},
                {name: 'php'},
                {name: '.NET'},
                {name: 'HTML'}
            ]
        }

    })

<span ng-click="clickTAG = {'tag':'js'}">THIS WORKS NICE BEACUSE THEY BEFORE REPEAT</span>

<ul>
    <li><strong>TAGS:</strong></li>
    <li ng-repeat="tag in bookTAG.tags" ng-click="clickTAG = {'tag': tag.name}">{{tag.name}}</li>
</ul>

<ul>
    <li><strong>BOOKS:</strong></li>
    <li ng-repeat="book in bookData.books | filter:clickTAG">{{book.name}}</li>
</ul>

Теги:

2 ответа

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

Каждый элемент, созданный ng-repeat, имеет свою собственную область, содержащую дополнительные поля $index, $first и т.д., А также book переменную. Итак, если внутри ng-repeat вы делаете

ng-click="clickTAG = {'tag': tag.name}"

вы устанавливаете поле clickTAG области повторяющихся элементов ng, вместо того, чтобы устанавливать его в область контроллера.

Чтобы предотвратить это, и одновременно очистите очиститель кода, добавьте следующую функцию в область контроллера:

$scope.setClickTag = function(name) {
    $scope.clickTAG = {'tag': name};
}

и использовать

ng-click="setClickTag(tag.name)"
  • 0
    бей меня к этому ...;)
  • 0
    спасибо тебе :)) это работает gr8;)
0

Поскольку ng-repeat создает свою собственную область действия и из-за прототипического наследования $scope при написании clickTAG =... он создает новую переменную в области ng-repeat. Вы можете использовать $parent для ссылки на родительский охват ng-repeat:

<ul>
    <li><strong>TAGS:</strong></li>
    <li ng-repeat="tag in bookTAG.tags" ng-click="$parent.clickTAG = {'tag': tag.name}">{{tag.name}}</li>
</ul>

Ещё вопросы

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