如果像这样定义一个简单的Rails控制器:
class ProductsController < ApplicationController
respond_to :json
def index
end
def new
end
def create
@product = Product.new(product_params)
@product.save
redirect_to @product
# this can be used if there is no view already created
# render plain: params[:products].inspect
end
def show
@product = Product.find(params[:id])
respond_with @product
end
def show_all
# @products = Product.all
# respond_with @products
respond_to do |format|
@products = Product.all
format.html
format.json { render json: @products }
end
end
private
def product_params
params.require(:product).permit(:name, :description)
end
end
我试图通过执行以下操作在我的Angular服务中使用它:
function HomeService($resource) {
function exposeTest() {
/*
{
'create': { method: 'POST' },
'index': { method: 'GET', isArray: true },
'show': { method: 'GET', isArray: false },
'update': { method: 'PUT' },
'destroy': { method: 'DELETE' }
}
*/
return $resource('/products/show_all', {}, {
'show_all': { method: 'GET', isArray: false }
});
}
return {
exposeTest: exposeTest
};
}
我在home.controller.js中这样称呼它:
console.log('Expose Test: '+JSON.stringify(HomeService.exposeTest().show_all()));
我的理解是你可以定义一个$ resource对象来与控制器交互 - 也就是说我已经定义了一个可以用show_all调用的GET类型方法,但我得到的只是一个空对象。
我做错了什么?
由于
答案 0 :(得分:2)
因此问题的本质是我在经过多次挖掘和调整后设法解决的问题。下面我将发布两种获取相同数据的方法 - 一种是基本的$ http,另一种是超过$资源。首先是服务电话:
HomeService.httpShowAll().then(function(data) {
vm.httpProducts = data;
});
HomeService.resourceShowAll().index().$promise.then(function(success) {
vm.resourceProducts = success;
});
在服务本身:
function httpShowAll() {
return $http.get('/products/index.json',{}).success(function(data) {});
}
function resourceShowAll() {
return $resource('/products/index.json', {} , {
index: {isArray: true}
});
}
resourceShowAll()函数中的上述索引部分充当控制器调用资源对象的键。最后是Rails控制器索引函数:
respond_to :json
def index
@products = Product.all
respond_to do |format|
format.json { render json: @products }
format.html
end
end
我希望这可以帮助任何来自纯角色背景的人使用Angular和Rails。
注意:我会在完成后立即使用基本的CRUD功能更新此答案: