Angular js :$q解决问题

Angular js : $q resolve issue

本文关键字:解决问题 js Angular      更新时间:2023-09-26

为了解决依赖关系,我在代码中引入了$q。 但是我的函数现在没有返回任何内容。

$rootScope.AutoQuote = dtoResource.rc1Step1DTO()当我控制台($rootScope);我没有得到任何结果。

自动报价控制器.js

(function () {
    "use strict";
 angular
    .module("autoQuote")
        //Do initalization on page load
       .run(["$log","$rootScope","$state","dtoResource","questionResource",function($log,$rootScope,$state,dtoResource,questionResource) { 
          $log.info('Post DTO on page load.');
          $rootScope.AutoQuote = dtoResource.rc1Step1DTO()
            .then(questionResource.getQuestions)
            .then(function(questions){
              $rootScope.questions = questions;
              console.log('Obtained questions. Assigned to rootscope');
          })  
          .then(function(){
            console.log('This should be printed after the above methods are done     executing');
              console.log($rootScope);
          })          
        }])
 // Post DTO
        .controller("autoQuoteCtrl", ["$log","$scope","$rootScope","dtoResource","$http","$state", function($log,$scope,$rootScope,dtoResource,$http,$state) {
        $scope.onSubmit = function() {
            //console.log(angular.element('#save_quote_email').val());
             // add check if valid
             //call function from your service, and do something with it
             $scope.AutoQuote = dtoResource.rc1Step2DTO();
             console.log($rootScope);
            //console.log($scope);
             $log.info('hi, I was invoked on form submit');
                $http({
                method  : 'POST',
                url     : '/rc1/postDto/'+$state.current.name,
                data: {'name': 'praveen', 'email': 'test@gmail.com'},
                    headers: {
                      'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8;'
                    }
                //data    : { dtoObj: '' }, // pass in data as strings //JSON.stringify(prepareAutoQuoteDTO.postAutoQuoteObj)
               // headers : { 'Content-Type': 'application/x-www-form-urlencoded' }  // set the headers so angular passing info as form data (not request payload)
            })
            .success(function(data) {
                console.log(data);
                if (!data.success) {
                } else {
                  // if successful, bind success message to message
                  //$scope.message = data.message;
                  //$state.go('step2');
                }
            });
        };            
    }]); 
}());

dtoResource.js

(function () {
    "use strict";
    angular
        .module("autoQuote")
        .factory("dtoResource",["$resource","$q", "$rootScope",dtoResource]);
    function dtoResource($resource,$q, $rootScope)
    {
        console.log('here in dto process.');
        var prepareAutoQuoteDTO = {        
        postAutoQuoteObj         : getAutoQuoteObject(),  
       /*
       * store session info
       */
       rc1Step1DTO : function(){
         var deferred = $q.defer();
         console.log('Inside rc1Step2DTO');
        var emailId = 'test1@gmail.com';
        if (emailId && emailId != '' && emailId != 'Email Address'){
            var email           = new Email();
            email.EmailTypeCd   = 'PRIMARY';
            email.EmailAddress  = emailId;
            this.postAutoQuoteObj.ApplicationInfo.GeneralPartyInfo.ContactInfo || new Contact();
            this.postAutoQuoteObj.ApplicationInfo.GeneralPartyInfo.ContactInfo.Emails = [];
            this.postAutoQuoteObj.ApplicationInfo.GeneralPartyInfo.ContactInfo.Emails.push(email);
        } 
        //$rootScope.AutoQuote = prepareAutoQuoteDTO;
         console.log('Exiting rc1Step2DTO');
       deferred.resolve('CA');
       return deferred.promise;
     }, 
     rc1Step2DTO :  function(){
       var deferred = $q.defer();
        /*
        * Store Driver information into array object
        * Collect driver info into local array and then reassign them to actual DTO object
        */

        this.postAutoQuoteObj.SessionInfo.UseExistingSession = false;
        this.postAutoQuoteObj.SessionInfo.PageName           = 'driver';
        this.postAutoQuoteObj.SessionInfo.PreviousPageName   = 'cars';
        //this.setCLK();
        deferred.resolve("CA");
       return deferred.promise;           
     }
    };
  return prepareAutoQuoteDTO;
}
function getAutoQuoteObject()
    {
        var autoQuoteObject = new autoQuote(); autoQuoteObject.DriverVehicleInfo = new DriverVehicleInfo(); autoQuoteObject.DriverVehicleInfo.Vehicles = []; autoQuoteObject.DriverVehicleInfo.Drivers = []; autoQuoteObject.ApplicationInfo = new ApplicationInfo(); autoQuoteObject.ApplicationInfo.Discount = new Discount(); autoQuoteObject.ApplicationInfo.GeneralPartyInfo = new GeneralPartyInfo(); autoQuoteObject.ApplicationInfo.GeneralPartyInfo.ContactInfo = new Contact(); autoQuoteObject.ApplicationInfo.MostRecentInsurance = new MostRecentInsurance(); autoQuoteObject.RequestedCoverage = new RequestedCoverage(); autoQuoteObject.RequestedCoverage.PolicyCoverage = new PolicyCoverage(); autoQuoteObject.RequestedCoverage.PolicyCoverage.Coverages = []; autoQuoteObject.RequestedCoverage.VehicleCoverage = []; autoQuoteObject.SessionInfo = new SessionInfo(); return autoQuoteObject;
    }
function autoQuote()
    {
        this.DriverVehicleInfo = null; this.ApplicationInfo = null; this.RequestedCoverage = null; this.SessionInfo = null; 
    }
function DriverVehicleInfo()
    {
        this.Drivers = []; this.Vehicles = []; this.DriverVehicleUsages = []; }; var Driver = function(){this.ID = null, this.PersonInfo = null, this.DriverRelationshipToApplicant = null, this.DriverRelationshipToApplicantCd = null, this.DriverLicense = null, this.DriverDetails = [], this.Incident = null, this.IsValid = false}; var PersonInfo = function(){this.FirstName = null, this.Initial = null, this.LastName = null, this.Suffix = null, this.SSN = null, this.GenderCd = null, this.BirthDate = null, this.MaritalStatusCd = null, this.OccupationClassCd = null, this.YearsOccupation = null, this.HighestEducation = null, this.AgeInYears = 0, this.SpouseLicenseStatus = null}; var DriverLicense = function(){this.AgeLicense = null, this.USLicenseStatus = null, this.DriverLicenseNumber = null, this.StateProvCd = null}; var DriverDetail = function(){this.DriverDetailCd = null, this.DriverDetailValue = null, this.DriverDetailDate = null}; var Incident = function(){this.ClaimAccidentsCount = null, this.ViolationsCount = null, this.HasLicenseBeenRevoked = null, this.LicenseSuspensionRevokedDate = null, this.HasRequiredCourtOrderedFinancial = null, this.ClaimAccidents = [], this.Violations = [], this.DUIs = []}; var DUI = function(){this.DateOfDUI = null, this.OtherValues = []}; var ClaimAccident = function(){this.Id = null, this.ClaimAccidentCd = null, this.displayText = null, this.ClaimAccidentDate = null, this.DateDisplayText = null, this.Comprehensive = null, this.Collision = null, this.RentalReimbursement = null, this.MedicalPayment = null, this.PayToOtherParty = null, this.IsInjury = null, this.IsPropertyDamage = null}; var Violation = function(){this.Id = null, this.ViolationCd = null, this.ViolationDate = null, this.displayText = null}; var Vehicle = function(){this.ID = null, this.VehicleHaveVin = false, this.VehicleIdentificationNumber = null, this.VehicleYear = null, this.VehicleMake = null, this.VehicleModel = null, this.VehicleSubModel = null, this.AntiLockBrakeCd = null, this.AntiTheftDeviceCd = null, this.VehicleUseCd = null, this.NumDaysDrivenPerWeek = null, this.DistanceOneWay = null, this.EstimatedAnnualDistance = null, this.OwnershipCd = null, this.RegistrationStateProvCd = null, this.VehIdentificationNumber = null, this.IsCustomizedOrAltered = null, this.OriginalVehicleCost = null, this.IsValid = false, this.VehicleType = null, this.VehicleVinStub = null, this.ShowVehicleAntiLockBrakeInfo = false, this.VehicleCost = null, this.ShowVehicleCost = false, this.DaytimeLights = null}; var DriverVehicleUsage = function(){this.DriverIDRef = null, this.VehicleIDRef = null, this.Usage = null}; var ApplicationInfo = function(){this.GeneralPartyInfo = null, this.Discount = null, this.MostRecentInsurance = null, this.ConsumerContactAuth = null, this.ConsumerInfoAuthorization = null, this.ConsumerContactMobileAuth = null}; var GeneralPartyInfo = function(){this.MainApplicantDriverIDRef = null, this.Address = null, this.PreviousAddress = null, this.ContactInfo = null, this.ResidenceInfo = null, this.ListedVehiclesRegisteredTo = null, this.CreditScore = 0}; var AddressInfo = function(){this.Address = null, this.City = null, this.State = null, this.PostalCode = null, this.County = null}; var PreviousAddress = function(){this.Address = null, this.City = null, this.State = null, this.PostalCode = null, this.County = null}; var Contact = function(){this.Phones = [], this.Emails = []}; var Email = function(){this.EmailTypeCd = null, this.EmailAddress = null}; var Phone = function(){this.PhoneTypeCd = null, this.PhoneNumber = null}; var Residence = function(){this.LengthAtCurrentAddressCd = null, this.ResidenceTypeCd = null, this.NumberDriversInHouseHold = null, this.VehiclesRegistedToInsured = null, this.DriverResidentsFromFL = null, this.CityLimits = null}; var Discount = function(){this.ResidentialInsurancePolicy = null, this.OwnBoat = null, this.OwnMotorCycle = null, this.IsAAAMember = null}; var MostRecentInsurance = function(){this.HasAutoInsurance = null, this.InsuranceCompanyName = null, this.CurrentInsurancePaying = null, this.LengthWithCurrentInsuranceCd = null, this.BodilyInjuryLiabilityLimit = null, this.LengthContinuouslyInsuredCd = null, this.ExpirationDate = null, this.InsuranceCanceledForNonPay = null, this.ClaimDeniedDueToFraud = null}; var RequestedCoverage = function(){this.EffectiveDate = null, this.StateCd = null, this.PolicyCoverage = null, this.VehiclesCoverage = []}; var PolicyCoverage = function(){this.Coverages = []}; var Coverage = function(){this.CoverageCd = null, this.CoverageValue = null}; var VehicleCoverage = function(){this.IsValid = false, this.VehicleIDRef = null, this.Coverages = []}; var SessionInfo = function(){this.SessionId = '', this.SecurityToken = '', this.Zip = '', this.StateCode = '', this.PageName = '', this.PageTheme = '', this.CarrierId = - 1, this.ReturnedCarrierTypes = null, this.CoveragePackage = '', this.UseExistingSession = false, this.QuoteStatus = '', this.SID = - 1, this.SRC = null, this.SRC_QCP = null, this.Referral = null, this.ClientIP = null, this.BrowserType = null, this.CLK = 0, this.QTR = '', this.CCID = '', this.AFF = '', this.PreviousSessionId = '', this.IgnoreErrors = false, this.RetrieveSource = '', this.PreviousPageName = ''
    }
}());

只是看着扑克。用修复程序分叉了一个新的。以下是有效的修复程序

普伦克链接

  • 我正在"getAutoQuoteObject"函数中设置$rootScope.AutoQuote

  • 函数getAutoQuoteObject需要作为依赖项$rootScope。所以把它搬到了工厂里面dtoResource

  • 并删除了这条不必要的行

    $rootScope.AutoQuote = dtoResource.rc1Step1DTO().then.....