2014-11-21 26 views
0
我在與修改是通過角模態控制器

問題與修改對象由角模態控制器

我有

.controller("viewController", function($scope, $modal) { 
    $scope.allPosts = [ 
    { 
     id: 1, 
     owner: "Owner 2", 
     profile: "images/profile.png", 
     title: "Book title 1", 
     image: null, 
     price: 25, 
     reply: 2, 
     fav: 1, 
     isFaved: false, 
     content: "test" 
    }, 
    { 
     id: 2, 
     owner: "Owner", 
     profile: "images/profile2.png", 
     title: "Ken Follett", 
     image: "images/book1.jpg", 
     price: 20, 
     reply: 12, 
     fav: 3, 
     isFaved: true, 
     content: "The book is in nice" 
    } 
    ]; 

    $scope.addFav = function(id) { 
    _.each($scope.allPosts, function(post) { 
     if(post.id === id) { 
     post.isFaved = !post.isFaved; 
     if(post.isFaved) { 
      post.fav++; 
      $scope.myFavs.push(post); 
     } else { 
      post.fav--; 
      $scope.myFavs = _.reject($scope.myFavs, function(post) { 
      return post.id === id; 
      }); 
     } 
     } 
    }); 
    }; 

    $scope.addPost = function() { 
    var modalInstance = $modal.open({ 
     templateUrl: 'myModalContent.html', 
     controller: 'ModalInstanceCtrl', 
     resolve: { 
      allPosts: function(){ 
       return $scope.allPosts; 
      } 
     } 
    }); 
    }; 
) 

.controller('ModalInstanceCtrl', function ($scope, $modalInstance, allPosts) { 
    $scope.postId = 50; 
    $scope.ok = function() { 

    var temp = {}; 
    temp.id = $scope.postId; 
    temp.profile = "images/profile.png"; 
    temp.title = $scope.title; 
    temp.type = $scope.type; 
    temp.price = $scope.price; 
    temp.reply = 0; 
    temp.fav = 0; 
    temp.isFaved = false; 
    temp.content = $scope.description; 
    $scope.allPosts.push(temp); 
    $scope.postId++; 
    $modalInstance.close(); 
    };  
}); 

$ scope.addFav(ID)功能添加對象問題

加入在現有的$ scope.allPosts下正常工作。但是,當我通過使用ModalInstanceCtrl添加新對象時,$ scope.allPosts被更新,但是當它到達$ scope.addFav(id)時,我無法修改從ModalInstanceCtrl推入$ scope.allPosts的新對象。比如我嘗試使用

post.fav++; // console.log(post) shows the fav property is not updated. it remains at 0. 
+0

你在哪裏申請新帖子的ID? 對我來說,它看起來像新帖子沒有得到一個ID,以便它永遠不會匹配循環ID === post.id – 2014-11-21 13:14:09

+0

我刪除了一些不必要的數據,使代碼更容易閱讀。我錯誤地刪除了id屬性。它與ID無關。我現在添加了id屬性。謝謝 – byebyebyezzz 2014-11-21 15:33:11

+0

這兩個控制器都有自己獨特的$範圍。 allPosts不在控制器之間共享。通常的解決方案是在注入兩個控制器的服務中具有公共數據。 – 2014-11-21 16:52:35

回答

0

更新後的最愛財產你不顯示我懷疑ModalInstanceController必須嵌套了的viewController範圍內的標記。這將解釋如何在兩個控制器中使用相同的allPosts。然而,由於JavaScript的原型繼承的工作原理,postId在每個範圍上都會有所不同。爲了克服這個問題,你可以在範圍是這樣定義的對象:

$scope.posts = { 
    postId: 0, 
    allPosts: [] 
} 

或者,甚至更好恕我直言,定義了一個帖子服務,封裝了所有崗位的行爲,並注入到這兩個控制器。然後,您可以對可能會遺留控制器繼承的標記進行任何更改。