var newservices = angular.module('newservices', []);
newservices.service('newservice', function ($http) {
return{
newdata: function(parameter){
return $http.get('/devicedetails/'+parameter).success(function(data) {
console.log(data)
return data
});
},
}
});
Run Code Online (Sandbox Code Playgroud)
上述服务包含在我的一个控制器中
data=newService.newdata($scope.dummy)
console.log(data)
Run Code Online (Sandbox Code Playgroud)
我试图打印数据时得到的是$ http函数对象,如下所示
Object {then: function, catch: function, finally: function, success: function, error: function}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
有些东西让我疯狂; 也许有人可以帮我解决以下问题?:
我正在使用AngularJS 1.2.26(因为需要支持IE8)
我必须调用一些最初为骨干前端构建的后端服务.我设法通过以下方式做到这一点:
$http({
method: 'POST',
url: url,
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
transformRequest: this._transformRequest,
data: formData
})
.success(function (data) {
// bla bla not relevant
}).error(function (error) {
// bla bla not relevant
});
Run Code Online (Sandbox Code Playgroud)
现在我尝试使用then函数,因为我发现更多结果,所以我将代码更改为:
$http({
method: 'POST',
url: url,
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
transformRequest: this._transformRequest,
data: formData
}).then(
function (response) {
// not relevant
}, function (error) {
// not relevant
});
Run Code Online (Sandbox Code Playgroud)
根据我的说法,理论上这应该与初始实现具有相同的结果,但令我惊讶的是,现在请求在服务器上失败了.在调试时我注意到转换请求函数的结果在成功处理的请求中的两个场景和错误中都会产生非常不同的结果,转换请求的结果如下:
com.bank.token.session = XXXXX&模型=%7B%22relatieRol%22%3A%22AANVRAGER%22%2C%22evaUitgevoerdDat%22%3Anull%2C%22sfhUitgevoerdDat%22%3Anull%2C%22bkrUitgevoerdDat%22%3Anull%2C%22bkrBekendCd %22%3A%22GOED_BEKEND%22%7D
当我使用'then'函数作为处理结果的方式时,transformRequest函数返回以下(错误)结果:
com.bank.token.session = XXXXXXXXXXX型号=%7B%22data%22%3A%7B%22relatieRol%22%3A%22AANVRAGER%22%2C%22evaUitgevoerdDat%22%3Anull%2C%22sfhUitgevoerdDat%22%3Anull%2C%22bkrUitgevoerdDat %22%3Anull%7D%2C%22status%22%3A200%2C%22config%22%3A%7B%22method%22%3A%22POST%22%2C%22transformResponse%22%3A%5Bnull%5D%2C%22url %22%3A%22http%3A%2F%2Flocalhost%2Femployee%2Findex.html%2Ffoo幅%2Fxchannel-FOO安全的portlet%2F1598792178%2Fver%3D2.0%2Fresource%2Fid%3Dfoo-fetch-%2Frparam% 3Dportal%3DfooPortal.wsp%22%2C%22headers%22%3A%7B%22Content型%22%3A%22application%2FX WWW的形式进行了urlencoded%22%2C%22Accept%22%3A%22application%2Fjson% 2C%20text%2Fplain%2C 20%*%*2F%22%7D%2C%22data%22%3A%7B%22com.bank.token.会话%22%3A%22XXXXXXXXXX%22%2C%22model%22%3A%22%7B%5C%22relatieRol%5C%22%3A%5C%22AANVRAGER%5C%22%7D%22%7D%7D%2C% …
我正在调用一个返回服务中的对象的promise,但不知何故在控制器中丢失了.
从我的控制器我打电话:
dataService.getSpanishOverviewByID(newItem, api)
.then(getSpanishOverviewByIDSuccess)
.catch(errorCallback);
Run Code Online (Sandbox Code Playgroud)
在我的服务中似乎一切正常:
function getSpanishOverviewByID(newItem, api) {
console.log(newItem + " / " + api);
return $http({
method: 'GET',
url: '/api/' + api,
newItem: newItem
})
.then(getSpanishByIDSuccess)
.catch(sendGetVolunteerError);
}
function getSpanishByIDSuccess(response) {
var log = [];
angular.forEach(response.data, function(item, key) {
console.log('I found this!' + response.config.newItem + " " + item.title);
if(item.title == response.config.newItem){
console.log('matching ' + item);
this.push(item);
}
}, log);
console.log(log);
return log;
}
Run Code Online (Sandbox Code Playgroud)
console.log(log)返回一个对象:

由于某种原因,这不会正确地传递给控制器:
function getSpanishOverviewByIDSuccess(data) {
$rootScope.newItem = data;
console.log('brought back ' + …Run Code Online (Sandbox Code Playgroud) 是否有可能将角度js服务放入全局范围以在JS Debugging控制台中使用?我想要的是一些非常低技术,快速和肮脏的测试.就像是:
var myService = angular.injector().get('myService');
myService.doSomething();
Run Code Online (Sandbox Code Playgroud)
让它做点什么.
但我一直在努力
Error: Unknown provider: myServiceProvider <- myService
Run Code Online (Sandbox Code Playgroud) 我正在开发一个小型游戏/模拟应用程序,我需要一个应用程序范围的时间变量来更新自己.它也可以是一个数字变量,对于我所关心的所有内容都在不断增加,例如每秒0..1..2..3..4,以表示此模拟应用程序中的时间进度.(这不一定是JavaScript Date Object本身)
我希望它可以在我注入的每个控制器/服务中访问,并在整个应用程序中自动更新.然后,依赖于此时间变量的其他范围变量将自动更新AngularJS提供的所有双向绑定好东西.
这甚至是AngularJS app dev哲学中的"合法"线吗?如果是,那么构建它的最佳方法是什么?
我$http在一个应该从我的服务器获取数据的服务中进行调用.出于某种原因,我无法让我的服务工作 - 没有任何反应.我知道服务器代码有效,因为如果我将$http调用放在我的控制器中的函数内,那么它会按预期获取服务器数据.这是我到目前为止的代码:
app.service('myService', function($q,$compile,$http) {
this.getData = function() {
var deferred = $q.defer();
var promise = $http.get('myfile.php').success(function (data) {
var response = $compile(data)($scope);
deferred.resolve(response);
});
return deferred.promise;
};
});
Run Code Online (Sandbox Code Playgroud)
此外,我知道使用此服务的代码是有效的,因为如果我执行以下操作,
app.service('myService', function() {
this.getData = function() {
return 'TEST';
};
});
Run Code Online (Sandbox Code Playgroud)
然后我会看到"TEST"这个词出现在利用这项服务的div中.我觉得我非常接近,但有一些我想念的东西.关于我做错了什么的任何想法?
更新:
controller: function($scope, $http, $rootScope, myService){
var scope = $rootScope;
scope.viewMyData = function() {
var element = myService.getData();
$('#myDiv').html(element);
}
}
Run Code Online (Sandbox Code Playgroud)
HTML:
<div ng-click="viewMyData()">Click Here</div>
<div id="myDiv"></div>
Run Code Online (Sandbox Code Playgroud)
如果我删除代码myService并简单地返回TEST(如上所述),那么我将看到"TEST"显示在id="myDiv" …
我正在使用带有angularJs的html5使用follwoing标签
这导致浏览器模式设置为IE8 Compat,文档模式设置为IE8标准.
<!doctype html>
<html xmlns:ng="http://angularjs.org" id="ng-app" ng-app="myApp">
<meta http-equiv="X-UA-Compatible" content="IE=8" />
Run Code Online (Sandbox Code Playgroud)
这导致浏览器模式="IE8 Compat"和文档模式="IE8标准".
我怎么能强制IE文件模式= IE8标准,所以我的东西将开始工作
好的,所以我有一个基本的登录页面,当用户登录时我想在屏幕顶部的导航栏上显示更多细节.当他们点击退出时,它就会消失.这是在工作(在某种程度上)然而,为了让导航栏更改我需要刷新页面,当我只使用路由来改变我的ng-view中的内容时,这显然不会发生.
当用户单击"登录"时,他们的用户名存储在使用ng-view中的登录控制器调用的服务中.
authService.SetUsername(user.Username);
Run Code Online (Sandbox Code Playgroud)
但是我想让它在我的导航栏控制器中生效,这个控制器在ng-view之外.
在这里你可以看到我修剪过的导航栏控制器如何使用它.
app.controller('navbarController', function ($scope, authService, $cookies, $location) {
$scope.displayUsername = authService.GetUsername();
});
Run Code Online (Sandbox Code Playgroud)
但displayusername只有在刷新页面并重新加载控制器时才会更改.如何更新存储用户名的服务时,如何立即更改?
在我看来,我有以下指令:
<line-chart data="buildData(id)" options="buildOptions(id)" />
Run Code Online (Sandbox Code Playgroud)
在我的控制器中我有:
var onGetData = function (response) {
return response.data;
}
$scope.buildData = function(id) {
dataService.getDataById(id).then(onGetData);
}
Run Code Online (Sandbox Code Playgroud)
在我的指示中,我有:
function lineChartLink($http){
return function(scope, element, attrs) {
chart.bindData(scope.data);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我的问题是,如何获得线图指令所需的数据?
在创建仪表板应用程序时,我遇到了需要将AngularJS控制器和服务集于一身的情况.
在主(第一)页面我有mainController(没有布局),也layoutController用方法loadLayoutFromAPI()和键绑定到按钮saveLayoutToAPI().
现在,在中学(第二)secondController只有而不是layoutController.我需要layoutController直接使用来自的方法secondController,我不想ng-controller在HTML中插入指令(而是secondController通过像服务一样的依赖注入).
MainPage(1st):
<div ng-controller="mainController">
<!-- some other code -->
<div ng-controller="layoutController as ctrl">
<a href="#" ng-click="ctrl.loadLayoutFromAPI()">Load</a>
<a href="#" ng-click="ctrl.saveLayoutToAPI()">Save</a>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
第二页(第二页):
<div ng-controller="secondController">
<!-- some other code -->
</div>
Run Code Online (Sandbox Code Playgroud)
我试图寻找这个问题,但根本找不到答案.
问题:我应该如何使用相同的代码(方法save()和load())作为Controller(ng-controller)和其他时间作为服务(包括在内dependency-injection)?
谢谢
JS Bin按要求
我有这个js代码
var app = angular.module('app', []);
app.service('testService', function(){
this.sayHello= function(text){
return "Service says \"Hello " + text + "\"";
};
this.sayGoodbye = function(text){
return "Service says \"Goodbye " + text + "\"";
};
});
app.controller('AboutCtrl', ['testService', function ($scope, $location, $http) {
$scope.fromService = testService.sayHello("World");
$scope.toService = testService.sayGoodbye("World");
}]);
Run Code Online (Sandbox Code Playgroud)
在我的HTML中我有这个.... ...嗨{{fromService}} .... ...控制台中没有错误,页面只是空白.
angularjs angularjs-directive angularjs-service angularjs-scope