찾다

 >  Q&A  >  본문

프런트엔드 - 앵귤러 장바구니 총 가격 및 삭제 기능이 유효하지 않습니다.

Angularjs를 배우는 과정에서 간단한 장바구니 연습을 하다가 다음과 같은 두 가지 문제에 부딪혔습니다
1. 제품의 총 가격($scope.TotalPrice)이 나오지 않습니다. 위에 모델이 바인딩되어 표시되지 않습니다
2. 단일 상품을 삭제()하면 다른 상품도 함께 삭제됩니다
데모 링크는 다음과 같습니다
http://jsbin.com/qometulete/edit?html,js,output
HTML 코드는 다음과 같습니다

으아악

JS 코드는 다음과 같습니다

으아악
滿天的星座滿天的星座2808일 전760

모든 응답(3)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-05-15 16:58:36

    먼저 실행 결과를 살펴보겠습니다: http://jsbin.com/vajeru/3/edit?html,js,output

    귀하의 질문은 다음과 같습니다.

    • 삭제 방법이 잘못되었습니다. key == index 하나를 삭제하면 $scope.datas에 있는 후속 요소의 배열 인덱스가 변경됩니다(1씩 감소). 요소의 인덱스가 삭제하려는 인덱스와 동일하므로 index 이후의 모든 멤버가 삭제됩니다. splice를 사용하여 삭제 방법을 다시 작성했습니다. 배열 방법key == index 删除一个之后,$scope.datas 中其后的元素的数组索引会变化(减1),元素的索引又和需要删除的索引相同了,从而会删除 index 之后的所有的成员,删除方法已经重写,使用数组的 splice 方法

    • getNum() getTotal() 两个方法,需要在控制器初始化的时候,执行一次,由于没有初始运行,而且没有在初始化的时候定义 TotalNumTotalPrice ,所以两个值是不会显示的。而且你是使用变量声明的方法定义的这两个函数,所以在定义它们之前调用会是 undefined

    • getTotal() 中,你把 price 拼写错为 pirce,从而 $scope.TotalPrice 会是 NaN,你用 number: 2 过滤器,当然就显示不出来

    另外给你如下的建议:

    • 值可以确定类型的时候,比较不要使用 ==,尽量使用 ===

    • 变量一定要在函数的头部一次性初始化,比如,将数字初始化为 0

    • 不要在循环之中调用可以在循环之外调用的方法,比如你在 reduceNum() addNum() 里不停的调用 getTotal()

    • getNum() getTotal() 두 메서드는 컨트롤러 초기화 시 한 번만 실행되어야 하며 초기화 중에 정의되지도 않습니다. code>TotalNum 및 TotalPrice이므로 두 값은 표시되지 않습니다. 그리고 변수 선언 방법을 사용하여 이 두 함수를 정의했기 때문에 정의하기 전에 호출하면 정의되지 않음

    getTotal()에서 price의 철자를 pirce로 잘못 입력했으므로 $scope.TotalPrice가 됩니다. >NaN, number: 2 필터를 사용하면 당연히 표시되지 않습니다🎜🎜 🎜 🎜또한 다음과 같은 제안을 드립니다. 🎜 🎜 🎜🎜값으로 유형을 결정할 수 있는 경우 ==를 사용하지 않고 ===를 사용하는 것이 좋습니다🎜🎜 🎜🎜변수는 함수의 선두에서 한 번 초기화되어야 합니다. 예를 들어 숫자를 0🎜🎜으로 초기화합니다. 🎜🎜루프 외부에서 호출할 수 있는 메서드를 루프에서 호출하지 마세요. 예를 들어 reduceNum() addNum()<에서 getTotal(()을 계속 호출하는 경우 /코드> )🎜🎜 🎜🎜횡단할 때 루프에서 벗어날 수 있을 때 최대한 빨리 루프에서 점프해 보세요🎜🎜 🎜

    회신하다
    0
  • 某草草

    某草草2017-05-15 16:58:36

    두 합계는 해당 함수에 선언되어 있습니다. 아무도 이 두 함수를 호출하지 않으면 어떻게 이 두 합계가 존재할 수 있나요? 글쓰는 방식이 너무 밋밋해요.

    회신하다
    0
  • 漂亮男人

    漂亮男人2017-05-15 16:58:36

    1. 상품 삭제 방법 중 _remove 방법이 잘못되었습니다.
    2. getNum 및 getTotal 방법에 문제가 있습니다.

    회신하다
    0
  • 취소회신하다