javascript - Angular - 组件中的函数对于 ng-repeat 无法正常工作

标签 javascript angularjs

我是 Angular 初学者,正在开发一个可以对书籍进行评分的简单应用程序。有一次我尝试将函数插入组件内部的 Controller 时遇到了这个问题。该函数应该增加“喜欢”数量并将其显示在“喜欢”类的段落中。然而,当我添加 ng-click 函数时,它似乎正在更改前一个元素的值(例如,当我单击元素 1 上的“喜欢”时,元素 0 中的喜欢计数器发生变化)。您能看一下并建议可能出现的问题吗?

这是组件:

angular.
module('booksList').
component('booksList', {
    templateUrl: 'books-list/books-list.template.html',
    controller: function BooksListController() {
        this.products = [
            {
                name: 'The Book of Trees',
                price: 19,
                pubdate: new Date('2009', '03', '08'),
                cover: 'https://images-na.ssl-images-amazon.com/images/I/61EQH6%2BCpuL._SX376_BO1,204,203,200_.jpg',
                likes: 0,
                dislikes: 0
            },
            {
                name: 'Program or be Programmed',
                price: 8,
                pubdate: new Date('2013', '08', '01'),
                cover: 'https://images-na.ssl-images-amazon.com/images/I/41dKoLBVToL._SX362_BO1,204,203,200_.jpg',
                likes: 0,
                dislikes: 0
            },
            {
                name: 'Sacred Games',
                price: 40,
                pubdate: new Date('2011', '09', '02'),
                cover: 'https://images-na.ssl-images-amazon.com/images/I/51MQoLSldhL._SX327_BO1,204,203,200_.jpg',
                likes: 0,
                dislikes: 0
            },
            {
                name: 'Shantaram',
                price: 20,
                pubdate: new Date('2010', '08', '02'),
                cover: 'https://images-na.ssl-images-amazon.com/images/I/51GEFhAifOL._SX332_BO1,204,203,200_.jpg',
                likes: 0,
                dislikes: 0

            }
        ];        
        this.orderProp = 'name';        
        this.plusOne = function(index) {            
            this.products[index].likes += 1;
            console.log(this.products[index].likes);            
        }
    }
});

这是我在其中使用函数的 html 模板:

<div ng-repeat="product in $ctrl.products | filter:$ctrl.query | orderBy:$ctrl.orderProp">
    <div class="thumbnail">
        <img ng-src="{{product.cover}}" alt="{{product.name}}">
        <p class="title">{{ product.name }}</p>
        <p class="price">{{ product.price | currency }}</p>
        <p class="date">{{ product.pubdate | date }}</p>
        <div class="rating">
            <p class="likes" ng-click="$ctrl.plusOne($index)">+{{product.likes}}</p>
            <p class="dislikes" ng-click="$ctrl.minusOne()">-{{product.dislikes}}</p>            
        </div>
    </div>
</div>

最佳答案

代替索引,

   ng-click="$ctrl.plusOne($index)"

传递产品本身

   ng-click="$ctrl.plusOne(product)"

并重写函数如下

    this.plusOne = function(product) {            
        product.likes += 1;
        }

关于javascript - Angular - 组件中的函数对于 ng-repeat 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42346348/

相关文章:

javascript - HTML - 在包含 anchor 标记时使 td 可调整大小

javascript - 在 JS 问题中重构 jQuery

javascript - 解析 CSS 背景图像

angularjs - 在 AngularJS 中重用表单片段

JavaScript:如何从 JSON 数据获取特定值

javascript - 动态添加到屏幕输入字段并在 ionic cordova (angularjs) 中求和它们的(数字)内容

javascript - 如何在javascript中使用razor页面字符串变量? - 用 C# 字符串显示警报

javascript - 协助展平包含一个对象(或可能超过 1 个)的对象数组

javascript - AngularJs 加载单独的 Controller

javascript - 单击 md-select 会在我的 <body> 中创建不必要的 "overflow-y: scroll;"