1

我需要顯示在我從$ NG重複指令的更新的結果有一定的幫助觀看

  • ProductsCtrl是看產品類型的變化,當它檢測到一個它搜索該類型的產品時。
  • 這肯定會檢測到產品類型更改,並且我從updateProducts函數獲取結果,但是我找不到返回的產品。
  • 我認爲將$ scope.productService.products映射到ProductService.products意味着它會自動更新。

我錯過了什麼嗎?

謝謝。

controllers.js

.controller('ProductsCtrl',['$scope','ProductService', '$location', 'SessionDataService', function($scope, ProductService, $location, SessionDataService){ 

    $scope.productService = ProductService; 
    $scope.productService.products = ProductService.products; 
    $scope.sessionDataService = SessionDataService; 
    $scope.productType = SessionDataService.productType; 

    $scope.$watch('productType', function(productTypeNew, productTypeOld){ 
     //update products 
     console.log('ProductsCtrl: watch : New Val - '+ productTypeNew + ',  Old Val - ' + productTypeOld); 
     $scope.productService.updateProducts(productTypeNew); 
     console.log("ProductsCtrl: watch : Products retrieved - " +   $scope.productService.products);   
}, true); 

}]); 

services.js

.factory('Product',['$resource', function($resource){ 
return $resource('/products/:id', { 
    id: '@id' 
}); 
}]) 
.factory('ProductService', ['Product', function(Product){ 
var products = []; 

function updateProducts(productType){ 
    console.log("ProductService updateProducts with product type " + productType); 
     Product.query({product_type: productType}, 
     function (data) { 
      console.log("ProductService updateProducts returned " + data); 
       var retProducts = data; 
       angular.copy(retProducts, products); 
       //console.log(retProducts); 
      }); 
} 
return { 

    products: products, 
    updateProducts: updateProducts 

}}]) 

HTML

<div ng-controller="ProductsCtrl"> 
     <tr ng-repeat="product in productService.products"> 
      <td>{{product.title}}</td> 
      <td>{{product.retailler}}</td> 
     </tr> 
    </div> 

回答

1

萬一別人運行到這個還是有人可以解釋爲什麼 - 答案是封裝整個表元素的控制器,而不僅僅是NG-重複

解決方案:

<div ng-controller="ProductsCtrl"> 
    <table> 
     <tr> 
      <th>Product</th> 
      <th>Retailler</th> 
     </tr> 

     <tr ng-repeat="product in products"> 
      <td>{{product.title}}</td> 
      <td>{{product.retailler}}</td> 
     </tr> 
    </table> 
    </div> 
0

所以看起來console.log(retProducts);會打印新值,但屏幕不會刷新。我認爲這是因爲你的複製代碼是$ apply,所以複製後沒有$摘要。我想包你angular.copy在$應用:

.factory('ProductService', ['Product', '$rootScope', function(Product){ 
var products = []; 

function updateProducts(productType){ 
    console.log("ProductService updateProducts with product type " + productType); 
     Product.query({product_type: productType}, 
     function (data) {$rootScope.$apply(function() { 
      console.log("ProductService updateProducts returned " + data); 
       var retProducts = data; 
       angular.copy(retProducts, products); 
       //console.log(retProducts); 
      })}); 
} 
return { 

    products: products, 
    updateProducts: updateProducts 

}}]) 
+0

謝謝 - 我也嘗試這種早些時候,我得到一個錯誤:$已經消化進度 – jeh

+0

@createsomevalue傷心。你可以在angular.copy之後使用console.log(產品)嗎?它看起來不錯嗎? –

+0

@createsomevalue另外,我會安裝Batarang(https://chrome.google.com/webstore/detail/angularjs-batarang/ighdmehidhipcmcojjgiloacoafjmpfk)以查看您的範圍是否真的發生了變化。 –