我有一点时间试图弄清楚为什么我在Angular中收到了未知提供程序错误.我已经检查了我能找到的关于这个问题的所有其他问题,并且大多数建议依赖注入错误.然而,在我看来,我不会忘记注入任何东西.我一直试图让这个解决方案的属性像Misko的这篇文章一样工作.我能够在解决后解决登出员工数据的问题,但随后我收到了未知提供程序错误,这会阻止数据显示在页面上.
这是我的路由器:
"use strict";
var app = angular.module('app',[
'employeeServices'
]);
app.config(appRouter);
function appRouter ($routeProvider) {
$routeProvider
.when('/employees/:account_id', {
controller: 'EmployeeCtrl',
templateUrl: 'view/employee/view.html',
resolve: employeeCtrl.resolve
})
.otherwise({ redirectTo: '/' });
}
Run Code Online (Sandbox Code Playgroud)
这是我的控制器
var employeeCtrl = app.controller('EmployeeCtrl', [
'$scope',
'employees',
function ($scope, employees) {
$scope.employee = employees;
console.log($scope.employee);
}
]);
employeeCtrl.resolve = {
employees: function (Employee, $q, $route) {
var deferred = $q.defer();
console.log("current params: ", $route.current.params.account_id);
Employee.getOne({ id: $route.current.params.account_id }, function (successData) {
deferred.resolve(successData);
}, function (errorData) {
deferred.reject(errorData); …Run Code Online (Sandbox Code Playgroud) 也许我错过了某种属性,但是我正在关注这个项目,我在控制器中遇到了这个错误.
TypeError: loginService.signin is not a function
Run Code Online (Sandbox Code Playgroud)
这是我的controller.js
angular.module('appcontrollers', []).controller('LoginController', ['$rootScope', '$scope', '$http', '$location', '$localStorage', 'loginService',
function ($rootScope, $scope, $http, loginService) {
$scope.signin = function() {
console.log("username: " + $scope.username);
console.log("pass: " + $scope.password);
var formData = {
username: $scope.username,
password: $scope.password
};
// ERROR IN THIS LINE
loginService.signin(formData, function(res) {
console.log("asdf");
if (res.type == false) {
console.log(res.data);
} else {
$localStorage.token = res.data.token;
console.log("Window location /");
}
}, function() {
$rootScope.error = "Error en el logueo del …Run Code Online (Sandbox Code Playgroud) javascript angularjs angularjs-service angularjs-scope angularjs-factory
编辑1:伙计们,我注意到我在我的身份验证工厂中调用$ http.get('/ posts')(出于特殊目的).抱歉这个愚蠢的问题.当赏金结束时我会删除它.
我有以下代码来加载页面https://localhost:3000/#/home,该页面从数据库中获取所有帖子并显示它们.
问题是,我意识到日志router.get /posts被打印了两次,而here和there只警告一次.
有谁知道这是否意味着$http.get进行了两次?如果是这样,问题出在哪里?
app.config(... ...) {
$stateProvider
.state('global', {
templateUrl: '/htmls/global.html',
controller: 'GlobalCtrl'
})
.state('global.home', {
url: '/home',
templateUrl: '/htmls/home.html',
controller: 'MainCtrl',
resolve: {
postPromise: ['posts', function (posts) {
return posts.getAll();
}]
}
});
}]);
app.factory('posts', ['$http', 'auth', function ($http, auth) {
var o = { posts: [] };
o.getAll = function () {
alert("before");
return $http.get('/posts').then(function (res) {
alert("after");
angular.copy(res.data, o.posts);
})
}
... ... …Run Code Online (Sandbox Code Playgroud) 我有一个控制器和工厂定义如下.
myApp.controller('ListController',
function($scope, ListFactory) {
$scope.posts = ListFactory.get();
console.log($scope.posts);
});
myApp.factory('ListFactory', function($http) {
return {
get: function() {
$http.get('http://example.com/list').then(function(response) {
if (response.data.error) {
return null;
}
else {
console.log(response.data);
return response.data;
}
});
}
};
});
Run Code Online (Sandbox Code Playgroud)
令我困惑的是,我从控制器获取未定义的输出,然后控制台输出的下一行是我工厂中的对象列表.我也尝试过将控制器更改为
myApp.controller('ListController',
function($scope, ListFactory) {
ListFactory.get().then(function(data) {
$scope.posts = data;
});
console.log($scope.posts);
});
Run Code Online (Sandbox Code Playgroud)
但我收到错误
TypeError: Cannot call method 'then' of undefined
Run Code Online (Sandbox Code Playgroud)
注意:我通过http://www.benlesh.com/2013/02/angularjs-creating-service-with-http.html找到了有关使用工厂的信息.
我正在尝试创建一个服务来获取json并将其传递给我homeCtrl我可以获取数据但是当它传递给我的homeCtrl它总是返回undefined.我卡住了.
我的服务:
var myService = angular.module("xo").factory("myService", ['$http', function($http){
return{
getResponders: (function(response){
$http.get('myUrl').then(function(response){
console.log("coming from servicejs", response.data);
});
})()
};
return myService;
}
]);
Run Code Online (Sandbox Code Playgroud)
我的家庭控制器:
var homeCtrl = angular.module("xo").controller("homeCtrl", ["$rootScope", "$scope", "$http", "myService",
function ($rootScope, $scope, $http, myService) {
$scope.goData = function(){
$scope.gotData = myService.getResponders;
};
console.log("my service is running", $scope.goData, myService);
}]);
Run Code Online (Sandbox Code Playgroud) angularjs angularjs-service angularjs-factory angularjs-http angular-promise
我的单页应用程序有2个控制器:第一个用于我的主菜单,第二个用于视图.他们与这家工厂共享数据
myApp.factory('MenuFactory', function(){
var factory = {
Monitor: "doneJob",
Control: "",
Report: "",
Display: "",
setMonitor: function(value){
factory.Monitor = value;
},
setControl: function(value){
factory.Control = value;
},
setReport: function(value){
factory.Report = value;
},
setDisplay: function(value){
factory.Display = value;
}
};
return factory;
});
Run Code Online (Sandbox Code Playgroud)
我想看看改变factory.Control,但我不能让它有效.
当我尝试这个:
$scope.$watch(function(){MenuFactory.Control}, function(NewValue, OldValue){
console.log(NewValue + ' ' + OldValue);
console.log(MenuFactory.Control);
}, true);
Run Code Online (Sandbox Code Playgroud)
我在控制台中得到"undefined undefined"和"Process".这个工厂的$ watch实现有什么问题吗?
javascript angularjs angularjs-scope angularjs-factory angularjs-watch
我getData(url)在我的工厂中使用 以下方法$http.get(url)来从URL获取数据
angular
.module('az-app')
.factory('WebServiceFactory', function ($http, $q) {
var WebServiceFactory = this;
WebServiceFactory.getData = function (url) {
var deferred = $q.defer();
$http.get(url)
.then(
function (response) {
deferred.resolve({
data: response
});
}, function (rejected) {
deferred.reject({
data: rejected
});
}
);
//Promise to be returned
return deferred.promise;
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,但我需要中止http.get和/或拒绝承诺,所以我可以显示来自我的控制器的错误消息,该消息具有以下方法:
var getSpecialties = function (type) {
doctorsCtrl.showLoading();
var url = "example.com";
WebServiceFactory.getData(url)
.then(
function (result) {
doctorsCtrl.hideLoading();
var specialtiesArray = result.data.data;
StorageFactory.specialties = …Run Code Online (Sandbox Code Playgroud) angularjs angularjs-service angularjs-factory ionic-framework ionic
我正在尝试构建一个工厂作为我的数据库模型的临时区域,以及一个api来执行基本的CRUD调用.我希望能够通过将数据存储在服务或工厂中来访问数据,并保持api方法,以便我可以在控制器中执行这些操作.
$scope.folders = Folders.data(); // for a factory
$scope.folders = Folders.data; // for a Service
Folders.create({name: "My Stuff, $oid: { 5fwewe033333 }, user_id: CurrentUser.id"});
Run Code Online (Sandbox Code Playgroud)
目前我在控制器中使用这样的文件夹工厂.
Folders.foldersData().success( function(data, status) {
$scope.folder = data;
})
.error( function(data,status) {
Flash.warning("There was a problem fetching your data");
});
Run Code Online (Sandbox Code Playgroud)
我知道我可以在控制器中解决一个承诺,但是我正在研究项目的大小,我喜欢在服务中访问文件夹模型的想法,而不必进行服务器调用来同步每次我做出改变时的数据.
angular.module('cmsApp')
.factory('Folders', function($http, $q){
var folders = {};
var messageWarn = "Upload Retrival Failed.";
return {
get: function(){
var defered = $q.defer();
$http.get('/folders').success( function ( data, status ) {
defered.resolve(data);
})
.error( function ( data, …Run Code Online (Sandbox Code Playgroud) javascript angularjs angularjs-service angularjs-scope angularjs-factory
我想知道如何将以下工厂重写为TypeScript代码.这是原始代码:
app.factory('errorInterceptor', function ($q) {
return {
responseError: function (response) {
console.error("Error: " + response.statusText);
return $q.reject(response);
}
}
});
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经尝试了以下内容:
export class errorInterceptor {
constructor(private $q:ng.IQService) {
}
public responseError(response:any){
console.error("Error: " + response.statusText);
return this.$q.reject(response);
}
public static getFactory(){
return errorInterceptor;
}
}
app.factory('errorInterceptor',errorInterceptor.getFactory());
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
Provider 'errorInterceptor' must return a value from $get factory method.
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我有一个控制器,如下所示.
(function () {
"use strict";
var app = angular.module('Demo')
.controller('MainController', ['$rootScope', '$scope', '$location', 'curUser',MainController]);
function MainController($rootScope, $scope, $location, curUser) {
//some logic here
}());
Run Code Online (Sandbox Code Playgroud)
我试图包含一个名为ngIdle的第三方模块,结果代码如下所示.
(function () {
"use strict";
var app = angular.module('Demo', ['ngIdle'])
.controller('MainController', ['$rootScope', '$scope', '$location', 'curUser','Idle', function ($rootScope, $scope, $location, curUser, Idle) {
}]).config(function (IdleProvider, KeepaliveProvider) {
// configure Idle settings
IdleProvider.idle(5); // in seconds
IdleProvider.timeout(5); // in seconds
KeepaliveProvider.interval(2); // in seconds
})
.run(function (Idle) {
// start watching when the app runs. also …Run Code Online (Sandbox Code Playgroud) angularjs ×10
javascript ×3
ajax ×1
angular-http ×1
express ×1
factory ×1
interceptor ×1
ionic ×1
ng-idle ×1
node.js ×1
typescript ×1