从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;
});
数据没有拉起来,没有错误。
$ 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;
});
看到数据正在旅行,但情况之一是什么我共享和我粘贴,但它不是在视图中显示 –
您需要将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;
});
});
- 服务必须返回的东西
-
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
}
尝试在http.get()中使用完整路径 –
您将收到CORS错误 –
XMLHttpRequest无法加载http://127.0.0.1:85/lib/data.txt。请求的资源上没有“Access-Control-Allow-Origin”标题。原因'http:// localhost:85'因此不被允许访问。 –