如何使用promises将参数传递给AngularJS中的函数

时间:2016-07-15 08:00:04

标签: javascript jquery angularjs

我想将参数发送到服务功能。

  

getQuestions:function(stateCode):questionResource.js

stateCode在$ scope中设置,来自dtoResource.rc1Step1DTO()的响应

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

以下是代码的plunker http://plnkr.co/edit/Op1QDwUBECAosPUC7r3N?p=preview

1 个答案:

答案 0 :(得分:0)

你的模块autoQuote.run()只会在你的应用程序加载过程中被调用一次。所以不要指望它再次执行。

你接近正确的答案。你只需要做一些重组。我提供的一个提示是担心稍后创建一个指令,首先获取控制器,路由首先工作。 您已经创建了一个出色的框架。你正在使用ui-router。 这意味着您可以告诉ui-router在请求状态时要执行哪个控制器。所以申请的生命周期如下

module.run //首先是这里的任何代码。仅限于初始负载 module.config //在你的案例app.config中创建你的状态。

然后根据网址确定您正在查看的状态; 将执行该状态(或视图)的控制器

所以如果你为/添加另一个状态配置,你可以将该状态绑定到你的autoQuoteCtrl。

此外,还有许多其他问题,例如尝试在输入元素中使用ng-model和value。这是不正确的。

你没有实现你的ui-views。这意味着您的控制器永远不会执行。从技术上讲,你的情况是autoQuoteCtrl会被执行但只是因为你使用ng-controller强制它进入页面,这就是ui-router旨在避免的。

我认为你最终将代码放在.run()中。这是您发现应用程序在页面加载时“运行”代码的唯一地方,这是错误的,它只是因为您的应用程序已加载而运行。对不起,如果我是多余的。但这是重要的一点。

此外,您正尝试通过将状态代码传递给资源来访问您的json数据。这不是$资源的运作方式。您传递资源的名称,它将返回该资源的所有内容。然后在返回promise后过滤代码。你只有一个资源。那就是“CA.json”,因此您应该能够在资源服务中只使用一行并且只需要一个资源服务。您将需要其他非资源服务,这些服务可以解除从JSON中过滤掉正确数据的问题。通常这就是应用程序调用不同资源的原因,以便每个人都返回所需的模型,而不是单个整体资源。

并且你永远不应该使用document.getElementById()你正在使用角度,所以你不直接与dom交互

最后,这里有一个经过大量修改的插件,可以帮助您指导正确的方向。

http://plnkr.co/edit/dUJm01uu7RnhltC2pLLb?p=preview