2015-12-08 4 views
0

В настоящее время я изучаю Angular.JS и работал с несколькими учебниками, подобными этому this one. Я последовал за Шагами, но попытался улучшить код, сохранив отдельные части, такие как controllers или services в отдельном .js файлах, потому что я слышал, что это хорошая привычка. Это не проблема, и все было хорошо. Но когда я придумал Service, который предоставляет мои сообщения, я также попытался написать какой-то API в Service, потому что я научился в другом учебнике для этого.Проблемы с услугой AngularJS

Появляется проблема: API для получения моего списка сообщений работает нормально, но если я попытаюсь отправить данные из-за функции addPost в API, он вообще не работает.

Возможно, вы можете помочь мне узнать, в чем проблема, потому что я хочу реализовать Backend на post-Service позже и хочу, чтобы все $http запросов в одном месте.


EDIT

код-образец ниже работает сейчас, и вы можете увидеть проблему, если вы пытаетесь добавить сообщение. Код останавливается после/во время функции addPost() в MainCtrl, потому что «очистка» формы HTML не происходит.


здесь вы можете найти свой код:

var app = angular.module('flapperNews', []); 
 

 
app.controller('MainCtrl', function($scope, postService){ 
 
    $scope.test = "Hello, World!"; 
 

 
    $scope.posts = postService.getPosts(); 
 

 
    $scope.addPost = function(){ 
 
     if(!$scope.title || $scope.title === '') { return; } 
 

 
     postService.addPost({title: $scope.title, link: $scope.link, upvotes: 0}); 
 
     //This code above was my try ith the API in posts.js 
 

 
     // $scope.posts.push({ 
 
     // title: $scope.title, 
 
     // link: $scope.link, // this whole part is from the tutorial and works fine 
 
     // upvotes: 0 
 
     //}); 
 

 
     $scope.title = ''; 
 
     $scope.link = ''; 
 
    }; 
 

 
    $scope.incrementUpvotes = function(post) { 
 
     post.upvotes += 1; 
 
    }; 
 
}); 
 

 
app.factory('postService', function() { 
 
    var srv = {}; 
 

 
    srv._posts = [ 
 
     {title: 'post 1', link: '', upvotes: 5}, 
 
     {title: 'post 2', link: '', upvotes: 2}, 
 
     {title: 'post 3', link: '', upvotes: 15}, 
 
     {title: 'post 4', link: '', upvotes: 9}, 
 
     {title: 'post 5', link: '', upvotes: 4} 
 
    ]; 
 

 
    srv.getPosts = function() { 
 
     return angular.copy(srv._posts); 
 
    }; 
 

 
    srv.addPost = function(post) { //function to put the new Post in the Array 
 
     srv._posts.push(post); 
 
    }; 
 

 
    return { 
 
     getPosts: function() { 
 
      return srv.getPosts(); 
 
     }, 
 
     addPost: function(post) { //the public API to put the post in the Array 
 
      srv.addPost(post); 
 
     } 
 
    }; 
 
});
<!DOCTYPE html> 
 
<html> 
 
<head> 
 
\t <meta charset="Utf-8"> 
 
\t <title>FlapperNews</title> 
 
\t <link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet"> 
 
\t <style> .glyphicon-thumbs-up { cursor:pointer } </style> 
 
</head> 
 
<body ng-app="flapperNews" ng-controller="MainCtrl"> 
 

 
\t <div class="row"> 
 
    <div class="col-md-6 col-md-offset-3"> 
 

 
     <div class="page-header"> 
 
     <h1>Flapper News</h1> 
 
     </div> 
 

 
     <div ng-repeat="post in posts | orderBy:'-upvotes'"> 
 
     <span class="glyphicon glyphicon-thumbs-up" 
 
      ng-click="incrementUpvotes(post)"></span> 
 
     {{post.upvotes}} 
 
     <span style="font-size:20px; margin-left:10px;"> 
 
      <a ng-show="post.link" href="{{post.link}}"> 
 
      {{post.title}} 
 
      </a> 
 
      <span ng-hide="post.link"> 
 
      {{post.title}} 
 
      </span> 
 
     </span> 
 
     </div> 
 

 
     <form ng-submit="addPost()" 
 
     style="margin-top:30px;"> 
 
     <h3>Add a new post</h3> 
 

 
     <div class="form-group"> 
 
      <input type="text" 
 
      class="form-control" 
 
      placeholder="Title" 
 
      ng-model="title"></input> 
 
     </div> 
 
     <div class="form-group"> 
 
      <input type="text" 
 
      class="form-control" 
 
      placeholder="Link" 
 
      ng-model="link"></input> 
 
     </div> 
 
     <button type="submit" class="btn btn-primary">Post</button> 
 
     </form> 
 

 
    </div> 
 
    </div> 
 
\t <!-- Scripts --> 
 
\t <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
\t <script src=scripts/app.js></script> 
 
\t <script src=scripts/controller/main.js></script> 
 
\t <script src=scripts/service/posts.js></script> 
 

 
</body> 
 
</html>

+0

какая ошибка у вас есть? – AlainIb

+0

Не запугивайте в создание отдельных файлов для всего. И какова ваша ошибка? –

+0

после того, как я нажму ** Сообщение ** новый 'post' не будет добавлен в список сообщений над' формой'. – JohnDizzle

ответ

1

После того, как вы нажмете данные на службу вам необходимо обновить $ scope.posts

$scope.addPost = function(){ 
    if(!$scope.title || $scope.title === '') { return; } 

    postService.addPost({title: $scope.title, link: scope.link, upvotes: 0}); 
    $scope.posts = postService.getPosts(); 

    // or edit postService.addPost so you can make 
    /* $scope.posts = postService.addPost({title: $scope.title, link: scope.link, upvotes: 0}); */ 


    $scope.title = ''; 
    $scope.link = ''; 

}; 
+0

На самом деле он работает! спасибо – JohnDizzle

Смежные вопросы