gpt4 book ai didi

javascript - AngularJS:如何将值从 Controller 传递到服务方法?

转载 作者:可可西里 更新时间:2023-11-01 01:25:01 24 4
gpt4 key购买 nike

我有一个依赖于 TransactionService 的 Controller 。其中一种方法是

$scope.thisMonthTransactions = function () {
$scope.resetTransactions();
var today = new Date();
$scope.month = (today.getMonth() + 1).toString();
$scope.year = today.getFullYear().toString();
$scope.transactions = Transaction.getForMonthAndYear();
};

TransactionService 看起来像

angular.module('transactionServices', ['ngResource']).factory('Transaction', function ($resource, $rootScope) {
return $resource('/users/:userId/transactions/:transactionId',
// todo: default user for now, change it
{userId: 'bd675d42-aa9b-11e2-9d27-b88d1205c810', transactionId: '@uuid'},
{
getRecent: {method: 'GET', params: {recent: true}, isArray: true},
getForMonthAndYear: {method: 'GET', params: {month: 5, year: 2013}, isArray: true}
});
});

如您所见,方法 getForMonthAndYear 取决于两个参数 monthyear,它们现在被硬编码为 params: {月:5,年:2013}。我如何从我的 Controller 传递这些数据?

我尝试在 TransactionService 中注入(inject) rootScope,但这没有帮助(这意味着我可能不知道如何使用它)。

还有 Angular ngResource documentation不推荐任何方式来执行此操作。

有人可以在这里指导吗?

更新
我的 Controller 看起来像

function TransactionsManagerController($scope, Transaction) {

$scope.thisMonthTransactions = function () {
$scope.resetTransactions();
var today = new Date();
$scope.month = (today.getMonth() + 1).toString();
$scope.year = today.getFullYear().toString();

var t = new Transaction();
$scope.transactions = t.getForMonthAndYear({month: $scope.month});
};
}

我将服务方式更改为

getForMonthAndYear: {method: 'GET', params: {month: @month, year: 2013}, isArray: true}

我查看了 console.log,它说

Uncaught SyntaxError: Unexpected token ILLEGAL transaction.js:11
Uncaught Error: No module: transactionServices

最佳答案

只有当调用需要有一个没有提供的默认值时,才需要在资源构造函数中定义参数。传递给该方法的任何参数都作为查询参数附加,无论它是否定义了默认值。 '@' 表示参数值被 JSON 响应中返回的值替换,因此您的 @uuid 有意义,但您的 @month 没有意义。

就我个人而言,我会像这样创建资源:

$resource('/users/:userId/transactions/:transactionId',
// todo: default user for now, change it
{userId: 'bd675d42-aa9b-11e2-9d27-b88d1205c810', transactionId: '@uuid'},
{
getRecent: {method: 'GET', params: {recent: true}, isArray: true},
getForMonthAndYear: {method: 'GET', isArray: true}
});

然后根据需要通过传入查询变量来添加它们。(创建特殊的方法名称很好但不是必需的,因此在下面显示了两种方式。)

var t = new Transaction();
$scope.recentTransactions = t.$get({recent:true}) //results in /users/bd675d42-aa9b-11e2-9d27-b88d1205c810/transactions/?recent=true
$scope.recentTransactions = t.$getRecent(); //same thing as above
$scope.transactions = t.$get({month: $scope.month, year: $scope.year}); //results in /users/bd675d42-aa9b-11e2-9d27-b88d1205c810/transactions/?month=5&year=2013
$scope.transactions = t.$getForMonthAndYear({month: $scope.month, year: $scope.year}); //same as above... since no defaults in constructor, always pass in the params needed

关于javascript - AngularJS:如何将值从 Controller 传递到服务方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16931255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com