【问题标题】:angular ng-repeat to always show even on empty object角度 ng-repeat 即使在空对象上也始终显示
【发布时间】:2015-12-05 18:18:16
【问题描述】:

您好,我想将项目发布到服务器,每次成功添加后,使用 ng-repeat 自动将其添加到 DOM

<div class=""  ng-repeat="book in books" >
   <div id="eachBook">{{book.title}}</div>
</div>

要发布数据并上传图像文件,我使用 Jquery ajax 和 $state.go(".") 重新加载当前页面:

var fd = new FormData();
fd.append("file", bookImage);

$http({ 
    method: 'POST',
    url: "/someurl,
    data: fd,
    headers: {
        'Content-Type': undefined
    }
}).success(function(Image){
     var book_obj = {
         bookTitle: bookTitle,
         bookImage: Image._id
     };
     $http.post("url to owner book", book_obj)
         .success(function(data){
                 $scope.bookImage = data.bookImage;
             $timeout(function(){
                 alert("success", "successfully added your book");
                 $state.transitionTo('book', {}, { reload: true });
             },2000);                   
         })

})

问题在于第一次添加,DOM 仍然是空的,即使我使用 $state 重新加载页面,它仍然无法用于第一次添加。最后我需要通过点击刷新手动刷新页面。

第一次添加后,它工作正常。每添加一本书,它就会自动添加到 DOM..

知道如何在不手动渲染页面的情况下自动启动第一个吗?使用 $timeout 延迟刷新没有效果。

【问题讨论】:

  • 您如何在books 数组中添加book 对象?真的很想看到..
  • 只是一个简单的 jquery.ajax.. 对不起,让我补充问题
  • 你不应该使用 jQuery ajax..你应该使用 angular 的 $http。看这个答案stackoverflow.com/a/34091011/2435473
  • 我明白了,有道理...但是我需要同时上传一个图像文件,不知道如何使用 $http..
  • 我使用 $http(request),但它最终与 $.ajax() 出现完全相同的问题。仍然没有发布第一篇文章。

标签: angularjs ng-repeat


【解决方案1】:

成功上市不只是简单的帖子吗?

var app = angular.module('myApp', []);
app.controller('bookCtrl', function($scope, $http, $timeout) {

  $scope.init = function(){
    $scope.title = 'initial book?'
    postBook();
  };
  $scope.books = [];

  $scope.post = function() {
    postBook();
  };

  function postBook(){
     if (!$scope.title) return;
    // timeout to simulate server post
    $timeout(function() {
      $scope.books.push({title:$scope.title});
      $scope.title = null;
    }, 1000);
  };

});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="bookCtrl" ng-init="init()">

  <div class="" ng-repeat="book in books">
    <div class="eachBook">{{book.title}}</div>
  </div>
  
  <input type="text" ng-model="title" /><button ng-click="post()">save</button>

</div>

编辑:不知道为什么你的 DOM 还没有准备好,但是 ng-init 来完成最初的书帖怎么样?

【讨论】:

  • 它仍然无法正常工作,即使使用 $timeout.. 我的意思还是同样的问题,需要手动刷新..
  • @vdj4y 我显然误解了这个问题。你能为我们制作一个问题的sn-p,以便我们看到问题吗? timeout 只是用来模拟你的后期延迟
  • 道歉,使用 $timeout 没有区别。我用最新的代码更新问题,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-14
  • 1970-01-01
  • 2017-03-16
相关资源
最近更新 更多