2016-03-29 17 views
1

Birisi, $ http isteğinin neden sunucuya sonsuz sayıda istek gönderdiğini açıklayabilir mi? Benim uygulamada , bu kodu şöyle, ben http isteği kaldırdığınızda

(function(){ 
    var app = angular.module("GrahamsSocksProducts", ["ngCookies"]); 
    app.controller("ProductsController", ["$controller", "$http", "$cookies", function($controller, $http, $cookies){ 
. 
. 
. 
this.setCookie = function(){ 
     username = "Some random guy" 
     alert(45) 

     $http({ 
      method : "GET", 
      url : "http://_____________", 
      params : { username : username } 
     }).then(function(){ 
      //do something 
     }) 
    } 
Ancak

, sadece tek bir isteği sunucuya geçirilir sunucuya sonsuz istekleri gönderir:

. 
.  
. 
this.setCookie = function(){ 
     username = "Some random guy" 
     alert(45) 
} 
. 
. 
. 

HTML Ben bu gibi başka sorular okudum

<div ng-app="GrahamsSocksProducts"> 
     <div ng-controller="ProductsController as products"> 
     {{ products.setCookie() }} 
      <div class="row"> 
       <div ng-repeat="product in products.products"> 
        <div class="col-sm-4 col-lg-4 col-md-4"> 
         <div class="thumbnail"> 
          <img ng-src="{{products.getImageTag(product)}}"> 
          <div class="caption"> 
           <h4 class="pull-right">${{ product.price }}</h4> 
           <h4> 
            <a href="#"> {{ product.name }}</a> 
           </h4> 
           <p>{{ product.description }}</a>.</p> 
           </div> 
        </div> 
        <div class="ratings"> 
         <p class="pull-right">{{ product.ratings }}/5</p> 
         <p> 
           <span ng-class="products.getStarColor(product.ratings, 1)" ng-click="product.ratings=1"></span> 
           <span ng-class="products.getStarColor(product.ratings, 2)" ng-click="product.ratings=2"></span> 
           <span ng-class="products.getStarColor(product.ratings, 3)" ng-click="product.ratings=3"></span> 
           <span ng-class="products.getStarColor(product.ratings, 4)" ng-click="product.ratings=4"></span> 
           <span ng-class="products.getStarColor(product.ratings, 5)" ng-click="product.ratings=5"></span> 
         </p> 
        </div> 
        <div> 
         <button class="btn btn-primary" ng-click="products.addToCart(product)">Add to Cart</button> 
         <button class="btn btn-default">Checkout</button> 
        </div> 
       </div> 
      </div> 
      <div class="row"> 
       <div class="col-md-12"> 
        <div class="container">     
         <div class="jumbotron"> 
          <ul class="list-group"ng-repeat="cartProduct in products.getCartNameAndQuantity()"> 
           <li class="list-group-item">{{ cartProduct.name }} ({{ cartProduct.quantity }})</li> 
          </ul> 
          Cart products price : {{ products.getCartPrice() }} 
         </div> 
        </div> 
       </div> 
      </div> 
     </div> 
    </div> 

: Infinite loop when trying to make Angularjs display a promise yaklaşık cevap vermiş AngularJS iki yönlü veri bağlama nasıl sağlar, ancak bu durumda, $ http kodu kaldırıldığında, istek bir kez, sonsuz kez gönderilir.

cevap

4

{{products.setCookie()}} ifadesi, digest döngüsünün her A LOT olduğu her çalıştırıldığında çalıştırılır. Sayfa her değiştiğinde, tıklamalar, olaylar vs. Her zaman bu ifadenin neden görünümde olduğunu bilmiyorum ancak başka bir yere koymanız gerekmeyecek

+2

Eğer OP'ler ProductsController'ı başlattığında bunu çalıştırmak istiyorsa Bunu denetleyici tanımının gövdesine koymalı. – nicooga

+0

Evet, bunun olması için daha iyi bir yer. Sadece denetleyici – Austin

+2

başlatıldığında çalıştırılacaktır. Ayrıca bu işlev çağrısını görünümden kaldırmanız ve denetleyicide ayarlanan bir değere bağlanmanız gerekir: Austin

İlgili konular