gpt4 book ai didi

angularjs - 如何在 $stateProvider 的 "resolve"中使用工厂?

转载 作者:行者123 更新时间:2023-12-01 09:54:22 24 4
gpt4 key购买 nike

作为标题,我想使用一个工厂 insisde 一个“解决”应用程序.js:

    angular
.module("goHenry", ["ui.router"])
.factory("httpPost", httpPost)
.controller("MainCTRL", ["$scope", MainCTRL]);

function MainCTRL($scope, httpPost){
this.nameApp = "CiaoMiao";
console.log($scope.children, httpPost);
}

function httpPost($http, $q){
return {
get: function() {
var deferred = $q.defer();
$http.post.apply(null, arguments)
.success(deferred.resolve)
.error(deferred.resolve);
return deferred.promise;
}
}//RETURN
}

路由器.js:

    var httpConfig = {headers:{ "Content-Type" : "application/x-www-form-urlencoded" }};

var config = ["$urlRouterProvider", "$stateProvider", function($urlRouterProvider, $stateProvider){

$urlRouterProvider.otherwise("/");

$stateProvider
.state("multi",{
url: "/multi",
"viewA@multi": {
templateUrl: "app/templates/login.htm",
controller: ["$scope", "getChildrenNumber", function($scope, getChildrenNumber){
this.nameApp = "nameAppChanged";
this.gatto = "Miao";
}],
controllerAs: "ctrl"
}
},
resolve: {
getChildrenNumber: ["$http", function($http, httpPost){
var httpP = httpPost.get("http://domain.com/user/login/api-login", $.param({ username:"ciaociao6@ciao.com", password:"ciaociA0" }), httpConfig)
console.log(httpP);
return "Some response from an API";
}]
}
});
angular
.module("CiaoMiao")
.config(config);

作为 console.log 的结果,我得到了“undefined”,我不知道如何在这部分代码中注入(inject)那个工厂。我尝试将其放入该 View 的主 Controller 中,但效果不佳。

最佳答案

(如果您将解决方案放在您的 View 中,它应该可以工作。如果您需要在同一状态的多个 View 中进行解析。我会尝试使用抽象状态并在那里添加解析。)有效但不需要(见下面的编辑。)

请看这个jsfiddle或下面的演示。

为了让内容更易于阅读,我对演示进行了一些缩减。也没有在演示中为 DI 添加数组表示法。您不需要在工厂中使用延迟对象,因为 $http 已经返回了一个 promise 。

编辑:您可以将解决方案放在 View 之外,它也应该可以工作。我已经在这个 fiddle 中试过了.因此,您的代码中可能存在其他问题。

好的,我认为您的代码的问题在于您没有从 promise 中返回已解析的值。类似于 promise.then(function(response) {return response;});

angular.module('demoApp', ['ui.router'])
.factory('myDataFactory', function ($http) {
return {
get: function (id) {
return $http.post('http://crossorigin.me/http://www.mocky.io/v2/55a65562b2016ce10c7e6ea9', {
id: id
}).then(function (response) {
return response;
});
}
};
})
.config(function ($urlRouterProvider, $stateProvider) {
$urlRouterProvider.otherwise('/124');

$stateProvider.state('home', {
url: '/:id',
views: {
'viewA': {
template: '{{hello}}',
controller: 'homeController',
resolve: {
backendData: function (myDataFactory, $stateParams) {
return myDataFactory.get($stateParams.id);
}
}
},
'@': {
template: 'main view'
}
}

});
})
.controller('homeController', function ($scope, backendData) {
console.log(backendData);
$scope.hello = backendData;
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.2/angular.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.15/angular-ui-router.js"></script>
<div ng-app="demoApp">
<div ui-view=""></div>
<div ui-view="viewA"></div>
</div>

关于angularjs - 如何在 $stateProvider 的 "resolve"中使用工厂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31430231/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com