从AngularJS服务

从AngularJS服务

问题描述:

您好我被困在定制服务中AngularJS提取数据我准备了一个代码片段作为波纹管从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; 
    }); 


}); 

的控制器

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

    $scope.cors = myfuncA.datax; 


}); 

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

+0

尝试在http.get()中使用完整路径 –

+0

您将收到CORS错误 –

+0

XMLHttpRequest无法加载http://127.0.0.1:85/lib/data.txt。请求的资源上没有“Access-Control-Allow-Origin”标题。原因'http:// localhost:85'因此不被允许访问。 –

$ 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; 
}); 
+0

看到数据正在旅行,但情况之一是什么我共享和我粘贴,但它不是在视图中显示 –

+0

您需要将Promise返回给控制器,然后在控制器上设置$ scope变量然后回复Promise返回 - 如果我得到时间会发布一些代码。 – markyph

东西沿着这些路线。没有测试,但会给你一个想法。你也应该使用$ log服务,也不知道你为什么要将它设置为一个变量。此外,数据如何存储在txt文件中?我假设JSON。但希望这会让你走上正轨。

var app = angular.module('myApp', []); 
app.service('myfuncA', function($http){ 
    return $http.get('lib/data.txt').then(function(datax){ 
     return datax; 
    }); 
}) 

控制器:

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

在不同的音符为$ HTTP调用,我宁愿使用一个工厂,并注入该工厂在控制器中设置$ scope.cors。事情是这样的:

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

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

和Controller我将消耗工厂:

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

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

    });

我觉得有问题,this不是指您的服务对象。

“尽管看起来这是指它定义的对象,但直到一个对象调用这个Function时,它才会被赋值,并且它被赋值的值完全基于对象它调用了这个函数,在大多数情况下它具有调用对象的值,但是有一些情况下它没有调用对象的值,我稍后会介绍这些方案。“

” 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 
}