【问题标题】:AngularJS controller function responseAngularJS 控制器功能响应
【发布时间】:2018-09-17 20:50:44
【问题描述】:

下面我的控制器通过如下服务返回一个json:

.controller('googleFormsCtrl', function ($scope, $http, $window, Userr,$timeout,$location) {
        // SEND THE HTTP REQUEST
        var url;
        var externalWindow;
        // MAKE API REQUEST for Authorization
        $http.get('/api/googleAuth').then(function (response) {
            url = response.data;
        });

        this.googleAuthentication = function () {
            externalWindow = $window.open(url, "Please Sign in with Google", "width:350px,height:350px");
        };
        // Close Authorization and set credentials
        window.onmessage = function (info) {
            externalWindow.close();
            // Get the URL
            var urlCode = info.data;

            // Get pure code of user
            var idx = urlCode.lastIndexOf("code=");
            var code = urlCode.substring(idx + 5).replace("#", "");

            // GET ALL FORMS
            Userr.getCredentials(code).then(function (res) {
                $scope.forms = JSON.stringify(res.data);

            });
        };

    }) 

如上所示,我在请求的回调中获取了所有表单,我需要使用它们才能将它们放入另一个页面的选项菜单中,如下所示:

<div>
    <h2> Google Forms </h2>
</div>
<br>
<br>
<br>
<div id="selectForm">
    <div class="form-group">
        <br>
        <!--The Forms should be displayed below dynamically-->
        <h5>Select Google Form</h5>
        <select class = "form-control" ng-model="model.id"
                ng-options="form.id as form.name for form in forms" >
        </select>
        {{model.id}}
    </div>
    <button class="btn btn-default" type="submit">OK</button>
</div>

这就是为什么我必须在函数范围之外访问它们。我来自 res.data 的数据是这样的:

[{
            "id": "1o3FUAJAPsS2m93_ECkVtLcYbMaaWHk6UGHIFG-6lpyA",
            "name": "Normal Form"
        }, {
            "id": "1QB5MHWtXytLUqGHUH1Ac-V9fS7hHlCqSWXjq2iFz1Zk",
            "name": "Parti Davetiyesi"
        }];

如何将这些数据导出到函数范围之外?感谢任何帮助或提示。提前致谢。

【问题讨论】:

  • 代码为什么要对数据对象进行字符串化? ng-option 指令接受一个对象而不是字符串。

标签: angularjs model-view-controller scope mean-stack


【解决方案1】:

任何时候您需要使某些东西在全球范围内可用,或者至少可用于多个控制器,您需要使用工厂或服务。

服务和工厂是单例的,这意味着一旦它们被实例化,它们就会在应用程序的整个生命周期内保留在内存中。

(事实上,在您的服务中实现某种缓存总是一个好主意,这样您就不会进行不必要的调用。)

所以,$http 请求的结果可以赋值给一个服务变量:

        // GET ALL FORMS
        Userr.getCredentials(code).then(function (res) {
            $scope.forms = JSON.stringify(res.data);
            // to make this data availbale everywhere,
            // simply add the result to the service itself
            Userr.forms = res.data;
        });

现在,在注入Userr 服务的每个控制器中,您都可以访问这些数据:

// in another controller
$scope.forms = Userr.forms;

【讨论】:

  • 感谢您的关注,但是我尝试了您的方法,但没有成功。请看一下我的控制器:pastebin.com/ytmhPin0
  • 您的服务Userr 的代码在哪里?那是相关代码
猜你喜欢
  • 2015-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-01
  • 1970-01-01
  • 2014-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多