如何使用 Promise 将参数传递给 AngularJS 中的函数
Posted
技术标签:
【中文标题】如何使用 Promise 将参数传递给 AngularJS 中的函数【英文标题】:How to pass parameter to function in AngularJS with promises 【发布时间】:2016-11-18 08:30:40 【问题描述】:我想向服务函数发送参数。
getQuestions : function(stateCode) : questionResource.js
stateCode 是根据 dtoResource.rc1Step1DTO() 的响应在 $scope 中设置的
angular
.module('autoQuote')
//Do initalization on page load
.run(['$log', '$rootScope', '$state', 'dtoResource', 'questionResource', function($log, $rootScope, $state, dtoResource, questionResource)
$log.info('Post DTO on page load.');
dtoResource.rc1Step1DTO()
.then(questionResource.getQuestions)
.then(function(questions)
$rootScope.questions = questions;
console.log('Obtained questions. Assigned to rootscope');
)
.then(function()
console.log('This should be printed after the above methods are done executing');
console.log($rootScope);
);
])
如何将状态代码传递给其他函数。 它在范围内的位置是
$scope.postAutoQuoteObj.SessionInfo.StateCode
下面是代码 http://plnkr.co/edit/Op1QDwUBECAosPUC7r3N?p=preview
【问题讨论】:
您的run()
函数甚至在您的控制器存在之前就运行了,并且您正在谈论的 $scope
无法从 run()
函数中访问。我认为您需要先解决 that 的后勤问题。
我在.run中写的函数我想在dom加载后执行,但是这些方法是独立的,应该是同步顺序的。你能建议我应该做些什么改变吗?在处理参数传递问题之前。
【参考方案1】:
您的模块 autoQuote.run() 只会在您的应用程序加载期间被调用一次。所以不要指望它会再次执行。
您已接近正确答案。你只需要做一些重组。我要提供的一个提示是担心稍后创建指令,首先让控制器、路由首先工作。 您已经创建了一个出色的框架来开始。您正在使用 ui-router。 这意味着您可以告诉 ui-router 在请求状态时执行哪个控制器。所以你的应用程序的生命周期如下
module.run //这里的任何代码首先。仅在初始负载 module.config //在你的情况下 app.config 创建你的状态。
然后取决于您根据 url 查看的状态; 该状态(或视图)的控制器将被执行
因此,如果您为 / 添加另一个状态配置,您可以将该状态绑定到您的 autoQuoteCtrl。
此外,还有许多其他问题,例如尝试在输入元素中使用 ng-model 和 value。这是不正确的。
你没有实现你的 ui-views。这将意味着您的控制器将永远不会执行。从技术上讲,您的情况 autoQuoteCtrl 将被执行,但这只是因为您使用 ng-controller 将其强制到页面上,而这是 ui-router 旨在避免的。
我认为这就是您最终将代码放在 .run() 中的原因。这是您发现您的应用程序会在页面加载时“运行”代码的唯一地方,这是错误的,它只是因为您的应用程序加载而运行。对不起,如果我是多余的。但这是很重要的一点。
另外,您正试图通过将状态码传递给您的资源来访问您的 json 数据。这不是 $resource 的工作方式。您传递资源的名称,它将返回该资源的所有内容。然后在返回承诺后过滤代码。你只有一种资源。那是“CA.json”,因此您应该能够在资源服务中只使用一行并且只需要一项资源服务。您将需要额外的非资源服务来完成从 JSON 中过滤出正确数据的繁重工作。通常这就是为什么一个应用会调用不同的资源,以便每个都返回所需的模型,而不是单一的单一资源。
你永远不应该使用 document.getElementById()
你正在使用 angular,所以你不直接与 dom 交互
最后,这里有一个经过大量修改的 plunkr,可以帮助您朝着正确的方向前进。
http://plnkr.co/edit/dUJm01uu7RnhltC2pLLb?p=preview
【讨论】:
以上是关于如何使用 Promise 将参数传递给 AngularJS 中的函数的主要内容,如果未能解决你的问题,请参考以下文章
使用 promise/thunk 通过 action 将参数传递给 reducer
将额外参数传递给jquery ajax promise回调[重复]