Javascript 将数据从ngRoute resolve传递到控制器
我有一个应用程序,我正在使用ngRoute生成SPA。在完成从数据库获取数据之前,我不想加载视图。下面的操作正常,但我无法将返回数据传递给我的控制器 角度服务:Javascript 将数据从ngRoute resolve传递到控制器,javascript,html,angularjs,angular-services,ngroute,Javascript,Html,Angularjs,Angular Services,Ngroute,我有一个应用程序,我正在使用ngRoute生成SPA。在完成从数据库获取数据之前,我不想加载视图。下面的操作正常,但我无法将返回数据传递给我的控制器 角度服务: angular.module('routeService',[]) .factory('dataFetch', function($http, $q){ var deferred = $q.defer(); var factory = {} factory.getProposals = function(){ retu
angular.module('routeService',[])
.factory('dataFetch', function($http, $q){
var deferred = $q.defer();
var factory = {}
factory.getProposals = function(){
return $http.get('urlHere')
.then(function(response){
//promise is fulfilled
deferred.resolve(response.data);
console.log("readched the bio service!" + response.data);
//promise is returned
// return deferred.promise;
return response.data;
}, function(response){
deferred.reject(response);
//promise is returned
return deferred.promise;
});};
return factory;
});
var login = angular.module('login', ['ngRoute', 'routeService'])
// configure our routes
login.config(function($routeProvider,$locationProvider) {
$routeProvider
// route for the home page
.when('/', {
templateUrl: '/overview.html',
controller: 'login',
resolve: {
myDta: function(dataFetch){
return dataFetch.getProposals();
}
}
})
});
login.controller('login', function($scope, myDta){
$scope.prop = myDta
})
角度控制器:
angular.module('routeService',[])
.factory('dataFetch', function($http, $q){
var deferred = $q.defer();
var factory = {}
factory.getProposals = function(){
return $http.get('urlHere')
.then(function(response){
//promise is fulfilled
deferred.resolve(response.data);
console.log("readched the bio service!" + response.data);
//promise is returned
// return deferred.promise;
return response.data;
}, function(response){
deferred.reject(response);
//promise is returned
return deferred.promise;
});};
return factory;
});
var login = angular.module('login', ['ngRoute', 'routeService'])
// configure our routes
login.config(function($routeProvider,$locationProvider) {
$routeProvider
// route for the home page
.when('/', {
templateUrl: '/overview.html',
controller: 'login',
resolve: {
myDta: function(dataFetch){
return dataFetch.getProposals();
}
}
})
});
login.controller('login', function($scope, myDta){
$scope.prop = myDta
})
我得到以下错误:
angular.module('routeService',[])
.factory('dataFetch', function($http, $q){
var deferred = $q.defer();
var factory = {}
factory.getProposals = function(){
return $http.get('urlHere')
.then(function(response){
//promise is fulfilled
deferred.resolve(response.data);
console.log("readched the bio service!" + response.data);
//promise is returned
// return deferred.promise;
return response.data;
}, function(response){
deferred.reject(response);
//promise is returned
return deferred.promise;
});};
return factory;
});
var login = angular.module('login', ['ngRoute', 'routeService'])
// configure our routes
login.config(function($routeProvider,$locationProvider) {
$routeProvider
// route for the home page
.when('/', {
templateUrl: '/overview.html',
controller: 'login',
resolve: {
myDta: function(dataFetch){
return dataFetch.getProposals();
}
}
})
});
login.controller('login', function($scope, myDta){
$scope.prop = myDta
})
未知提供程序:myDtaProvider您可以使用$route
服务访问解析的值,如前所述。
此外,你的工厂有非常恼人的事情。您正在使用全局承诺,并在出现错误时返回承诺。这是完全错误的。使用承诺的正确方法是
angular.module('routeService',[])
.factory('dataFetch', function($http, $q) {
var factory = {}
factory.getProposals = function() {
var deferred = $q.defer();
$http.get('urlHere')
.then(function(response) {
// Do what else you want to do
deferred.resolve(response.data);
}, function(response) {
// Do what else you want to do
deferred.reject(response);
});
return deferred.promise;
};
return factory;
});
并添加依赖项以解析这样的路由中的数据
$routeProvider
// route for the home page
.when('/', {
templateUrl: '/overview.html',
controller: 'login',
resolve: {
myDta: function(dataFetch){
return dataFetch.getProposals();
}
}
})
您可以在login
控制器中访问myDep
,如下所示:
login.controller('login', function($scope, $route) {
$scope.myDta = $route.current.locals.myDta;
});
以下是工作示例:错误使用ng controller='login'
我得到以下错误:
Unknown provider: myDtaProvider <- myDta <- login
有关详细信息,请参阅这不是在加载控制器之前解析数据的角度方法。@MuliYulzary我只是使用$routes
服务访问解析数据,因为直接依赖关系失败。什么是无角的?我觉得没问题。你能解释一下什么不是“角度方式”吗?直接依赖应该可以。这里还有别的东西。还有滥用q服务,但这不是一个大问题。除了一些不好的承诺实践之外,我认为您的代码没有真正的问题。您是否将routeService.js
包含在index.html
文件中?@MuliYulzary您能解释一下这种不好的做法吗?