使用$ resource创建基本对象

时间:2014-05-31 14:51:00

标签: javascript angularjs rest

我已经遍布教程网站,无法正常工作

我正在尝试使用我的服务器创建一个适用于REST的角度应用程序(我下载了this并设法使其正常工作但我从头开始新的更好地了解所有内容)。因为我是个骗子,因此制作REST服务器很容易,但我对角度部分并不熟悉。

我用yeoman创建了一个简单的目录,并将我的REST服务器放在另一个文件夹旁边,所以我有:

  • ------这里包含所有角度代码的应用
  • ------引擎是一个yii2框架

app/script/app.js我有:

'use strict'; // BTW what is this line doing?

var app = angular
  .module('gardeshApp', [
    'ngCookies',
    'ngResource',
    'ngSanitize',
    'ngRoute'
  ])
  .config(function ($routeProvider) {
    $routeProvider
      .when('/', {
        templateUrl: 'views/main.html',
        controller: 'MainCtrl'
      })

      .when('/post/index' , {
            templateUrl: 'views/post/index.html',
            controller : 'PostList'
        })

      .otherwise({
        redirectTo: '/'
      });
  });

我想制作某种Model对象来放入收到的数据,所以我创建了一个Post模型,如:

app.factory('Post' , ['$resource'] , function($resource){
    var Post = $resource('http://localhost/testApp/engine/web/post/:id' , {id : '@id'} , {update: {method: 'PUT'}});

    angular.extend(Post.prototype , {

        save: function (values) {
            if (values) {
                angular.extend(this, values);
            }
            if (this.id) {
                return this.$update();
            }
            return this.$save();
        }

    });

});

和一个获取数据的控制器:

app
    .controller('PostList', ['$scope', '$http' , '$resource',
    function($scope, $http) {

//     $http.get('http://localhost/testApp/engine/web/post').success(function(data){
//         console.log(data); // this works fine and gets the json ed data
//     });


        var posts = new Post();
        console.log(posts.query());

    }]);

我不想自己打电话给$http.get,我想让它变得动态,但错误说Post没有定义。

如何制作一个合适的Post对象来表示我正在提取的模型?

1 个答案:

答案 0 :(得分:0)

您可以这样做:

app.factory('Post' , ['$resource'] , function($resource){
    var Post = $resource('http://localhost/testApp/engine/web/post/:id', 
        {
            update: {method: 'PUT'}
        }
    );
    return Post;
});

app.controller('PostList', ['$scope', '$http' , 'Post',
    function($scope, $http, Post) {
        console.log(Post.query());
    }]);

您需要在工厂中返回构建的对象,以便稍后可以依赖注入。然后在你的控制器中,你需要声明你想要Post,而Angular会为你注入它。