javascript - 将项目添加到模型并刷新第二次 ng-repeat

标签 javascript angularjs angularjs-ng-repeat

在编写电话教程时,我想知道如何实现这个用例

  1. 浏览器呈现手机列表
  2. 用户点击add phone对于其中一部手机
  3. 函数addItem被触发并将此手机添加到数组phonesInCart
  4. 购物车中包含手机的列表 $scope.phonesInCart = [];已更新

我的 codepen demo 与此代码具有相同的逻辑

<body ng-controller="PhoneListCtrl">
<h3>Phones we sell</h3>
<ul class="phones">
  <li ng-repeat="phone in phones | filter:query | orderBy:orderProp">
    <b>{{phone.name}} </b>
    <button ng-click="addItem(phone)"
            ng-disabled="{{phone.orderReadonly}}">add phone</button>
  </li>
</ul>

<h3>Phones in your cart</h3>
<ul>
  <li ng-repeat="phoneInCart in phonesInCart"> 
    {{phoneInCart.name}}
  </li> 
</ul>
</body>

和相关的 JavaScript

$scope.phonesInCart = [];
$scope.addItem = function(phone) { 
    // these lines have no effect on the ui
    phonesInCart.push(phone);
    $scope.$apply();
}

当前状态

呈现列表并触发“addItem”函数。 目前购物车中的手机列表未更新/未呈现。

我的问题

能解释一下吗

  • 如何填充第二个数组 phonesInCart[]并刷新另一个 ng-repeat
  • 我是否必须创建/使用多个 Controller phonecatApp.controller('PhoneListCtrl' ...能够再过一次ng-repeat

最佳答案

在您的代码中,您需要执行以下操作,而不是 phonesInCart.push(phone):

$scope.phonesInCart.push(phone)

因为这是您在 html 中循环的变量。

编辑 由于 addItem 调用是作为 ng-click 指令的一部分发生的,因此您可以摆脱 $scope .$应用。实际上,您当前的代码应该会收到一条错误消息“摘要循环已在进行中”。

关于javascript - 将项目添加到模型并刷新第二次 ng-repeat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31608586/

相关文章:

javascript - Gnuplot:网站上嵌入的交互式 SVG 图形在缩放时显示错误的鼠标坐标

javascript - 不使用 "return"从 Javascript 函数返回一个值

android - OpenStreetMap 未在 Android 上显示

javascript - ng-Show 不在 ng-repeat 中更新

javascript - Angular ng-repeat 输入验证

javascript - jQuery 不能正确地乘以数字

angularjs - 使用 angular-formly 编辑数组元素

javascript - AngularJS 自定义表单验证指令在我的模式中不起作用

angularjs - 如何在angularjs中显示带有小数部分的数字

javascript - 在 Next.js 中根据屏幕尺寸渲染不同的组件