从AngularJS Service中提取数据

时间:2015-10-07 11:39:34

标签: javascript angularjs angular-services

您好我在AngularJS中遇到了自定义服务我准备了一段代码片段如下所示

代表HTML:

<div ng-controller="ctrlC">
<ul ng-repeat="x in cors">
    <li>{{x.Name}}</li>
</ul>
</div>

用于AngularJS服务

var app = angular.module('myApp', []);
app.service('myfuncA', function($http){

    $http.get('lib/data.txt').success(function(datax){


        this.dataM = datax;

    }).error(function(){

var den =   console.log("No Data");
this.case = den;
    });


});

for controller

app.controller('ctrlC', function($scope, myfuncA){

    $scope.cors = myfuncA.datax;


});

数据没有拉起来,没有错误。

5 个答案:

答案 0 :(得分:1)

  1. 服务必须返回
  2. datax是一个内部变量,不适用于服务外部的上下文。

    尝试返回$http.get的承诺或更好的承诺结果。

    app.service('myfuncA', function($http){
      var service = {
           run: run
      };
    
      function run(){
        var ret;
        $http.get('lib/data.txt')
             .success(function(datax){
               ret = datax;})
             .error(function(){
               console.log("No Data");});
        return ret;
      }
    

    });

答案 1 :(得分:0)

$ http.get方法返回HttpPromise(https://docs.angularjs.org/api/ng/service/ $ http#get)。 以下是使用示例:https://docs.angularjs.org/api/ng/service/ $ http

尝试使用:

$http.get('lib/data.txt').then(function(datax){
    this.dataM = datax;
}, function(){
    var den = console.log("No Data");
    this.case = den;
});

答案 2 :(得分:0)

这些方面的东西。没有经过测试,但会给你一个想法。此外,您应该使用$ log服务,也不确定为什么要将其设置为变量。如何将数据存储在txt文件中?我假设JSON。但希望这会让你走上正轨。

app.controller('ctrlC', function($scope,$log myfuncA){
    myfuncA.then(function(datax){
           $scope.cors = datax;
           },function() {$log.log("No Data");};
    });
});

控制器:

namedParameters

答案 3 :(得分:0)

对于$ http调用的另一个注释,我宁愿使用工厂并在控制器中注入该工厂来设置$ scope.cors。像这样:

app.factory('myfuncA', function($http){
    return {
         getData: function() {

             return $http.get('lib/data.txt');
          };
    }
});

在控制器中我会消耗工厂:

app.controller('ctrlC', function($scope, myfuncA){
    myfuncA.getData().then(function(response) {
         $scope.cors = response.data;
    });
});

答案 4 :(得分:0)

我认为问题在于this并不是指您的服务对象。

“即使看起来它指的是定义它的对象,直到一个对象调用此函数时才会实际分配一个值。并且它所分配的值完全基于调用此函数的对象。在大多数情况下,它具有调用对象的值。但是,有一些情况下它没有调用对象的值。我稍后会触及这些场景。“

“当我们借用一个使用它的方法时,当我们将一个使用它的方法分配给一个变量,当一个使用它的函数作为回调函数传递时,这个关键字最容易被误解在闭包“

中使用

如果我是你,我会使用其他类型的语法,例如:

angular.module('myApp').factory('myfuncA', dataService);

/* @ngInject */
function dataService($http) {
    var service = {
        getData: getData
    };

    return service;

    function getData() {
        return $http.get('lib/data.txt');//$http.get method returns HttpPromise
    }
}

然后使用它:

myfuncA.getData().then(function (result) {
    //your code
}