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

Pra*_*n D 5 javascript jquery angularjs

我想把参数发送到服务功能.

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);
            });

    }])
Run Code Online (Sandbox Code Playgroud)

如何将状态代码传递给其他函数.它在范围上的地位是

$scope.postAutoQuoteObj.SessionInfo.StateCode
Run Code Online (Sandbox Code Playgroud)

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

Dou*_*ain 0

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

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

module.run //首先这里的任何代码。仅在初始加载 module.config //在您的情况下 app.config 创建您的状态。

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

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

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

你没有实现你的用户界面视图。这将意味着您的控制器将永远不会执行。从技术上讲,如果你的情况 autoQuoteCtrl 会被执行,但这只是因为你使用 ng-controller 将其强制到页面上,而这正是 ui-router 旨在避免的。

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

此外,您尝试通过将状态代码传递给您的资源来访问您的 json 数据。$resource 不是这样工作的。您传递资源的名称,它将返回该资源的所有内容。然后在返回承诺后过滤代码。你只有一种资源。即“CA.json”,因此您应该能够只使用资源服务中的一行,并且只需要一项资源服务。您将需要额外的非资源服务来完成从 JSON 中筛选出正确数据的繁重工作。通常,这就是应用程序调用不同资源的原因,以便每个资源返回所需的模型,而不是单个单一资源。

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

最后,这里有一个经过多次修改的 plunkr,可以帮助指导您走向正确的方向。

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