AngularJS工厂。我需要在工厂中调用一个传入参数的方法,然后我需要从不同的控制器中检索结果

时间:2015-01-28 15:20:06

标签: angularjs http controller resources factory

我是AngularJS的新手。我正在建立一个电子邮件前端作为大学项目。

我有一个收件箱视图,可以从json文件中检索电子邮件。通过调用它可以正常工作:$ scope.emails = InboxService.query();. 当用户点击电子邮件时,他们会被重定向到我想要查看电子邮件的新页面,也可以从json文件(仅用于测试)。

控制器:

app.controller('InboxController', function ($scope, $location, InboxService, EmailService) {

//Make call to email by id
$scope.viewEmail = function(emailId)
{
    //DOES NOT WORK
    EmailService.find({id: emailId});

    $location.path('inbox/email/' + emailId);
};

//Make call to inbox
$scope.emails = InboxService.query();

});

当用户点击电子邮件时,我想使用该ID来检索另一个json文件,并将其传递给单独的控制器以获取新页面。

这是我的EmailController:

app.controller('EmailController', function ($scope, InboxService, EmailService) {

$scope.emails = {};

//DOES NOT WORK
EmailService.getEmail(function(response){

    $scope.emails.email = response;
});

});

这是电子邮件服务:不工作

app.factory('EmailService', function ($resource) {

var thisEmail = {};

thisEmail.find = function () {

    thisEmail = $resource('json/message/:id.json', {}, {
        get: {method: 'GET', params: {id: '@id'}}
    })
},
    thisEmail.getEmail = function () {

        return thisEmail;

    };
return thisEmail;

});

该服务不能满足我的需求。我想使用id检索json文件,然后能够在EmailController中访问该文件。

1 个答案:

答案 0 :(得分:0)

尝试:

app.factory('EmailService', ['$resource',function ($resource) {

   return $resource('json/message/:id.json', {}, {
        get: {method: 'GET', params: {id: '@id'}}        
    });

}]);

在您的控制器中:

EmailService.get({id:emailId});

您应该使用内置状态提供程序https://docs.angularjs.org/api/ngRoute/service/ $ route 或https://github.com/angular-ui/ui-router/wiki而不是直接使用位置哈希。