javascript - Angularjs - 将数据传递给工厂方法不起作用

标签 javascript angularjs http

我刚开始编码 Angular ,我不确定我到底做错了什么。

我有一个使用 $http get 方法的工厂:

angular.module('d3_survey')
.factory('currentSurvey', ['$http', function($http) {
    return{
        sweep : function(number) {
            console.log('resources/currentSurvey/' + number + '.json');
            return $http.get('resources/currentSurvey/' + number + '.json').then(function (response) {
                return response;
            });
        }
     }
}]);

我认为我可以这样做,因为 sweep 是一个闭包和所有内容,而且它仍然可以访问 $http。我在我的 ui-router 配置中解析该服务。

resolve : {
                        surveyDetails : ['surveyQuestions', function(surveyQuestions){
                           return surveyQuestions.all();
                        }],
                        messages : ['currentSurvey', function(currentSurvey) {
                            return currentSurvey;
                        }]
                      }

我将“消息”注入(inject)我的 Controller 并尝试调用扫描方法:

var messages = $scope.currentSurvey.sweep('1');

$scope.result = JSON.stringify(messages);

但是当我将 $scope.result 绑定(bind)到我的 View 时,我在页面上看到了一些奇怪的东西:

{"$$state":{"status":0}}

我看到其他问题,有些人对工厂方法的结果做了进一步的 .then(),但即使这样也没有成功。

这是我在控制台上看到的,但没有任何意义:

SyntaxError: Unexpected token m
at Object.parse (native)
at pc (http://localhost:63342/SurveyTool/js/angular.min.js:14:208)
at Zb (http://localhost:63342/SurveyTool/js/angular.min.js:76:379)
at http://localhost:63342/SurveyTool/js/angular.min.js:77:237
at s (http://localhost:63342/SurveyTool/js/angular.min.js:7:302)
at Zc (http://localhost:63342/SurveyTool/js/angular.min.js:77:219)
at c (http://localhost:63342/SurveyTool/js/angular.min.js:78:349)
at http://localhost:63342/SurveyTool/js/angular.min.js:112:20
at l.$eval (http://localhost:63342/SurveyTool/js/angular.min.js:125:305)
at l.$digest (http://localhost:63342/SurveyTool/js/angular.min.js:122:398) angular.js:11939

最佳答案

您不能像 AJAX 请求那样只从异步操作返回。在您的情况下,currentSurvey.sweep 返回 Promise对象,因此您应该使用它的 API 将回调与 then 方法链接起来。一旦数据可用,将调用此回调:

messages.sweep('1').then(function(response) {
    $scope.result = JSON.stringify(response.data);    
});

另一件事,您实际上不需要在路由器配置的解析部分提供 messages 键。您可以将 currentSurvey 服务直接注入(inject) Controller 。

关于javascript - Angularjs - 将数据传递给工厂方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28705646/

相关文章:

javascript - Python Selenium 或常规 Javascript,选择伪下拉列表的列表元素选项?

javascript - 当我滚动那个 div 时,如何在 jQuery var 中存储特定的 div id

python - 区分nginx、haproxy、varnish和uWSGI/Gunicorn

http - 为什么主机地址包含在 HTTP 1.1 GET 命令中?

javascript - 有什么方法可以在 'simulate' 上右键另存为命令或使用 JavaScript 在浏览器中强制下载文件?

javascript - ionic 混合移动应用程序获取设备位置

javascript - 需要一些使用 CasperJS 进行抓取的帮助

javascript - 我可以阻止浏览器 UI 线程直到 Angularjs Promise 完成吗?

angularjs - 安装 Karma 失败

angularjs - Protractor 测试没有测试和断言输出,而只有规范