2014-11-21 65 views
0

因此,我試圖將數據從網站的首頁形式傳遞到網站上的應用程序,用戶可以在其中填寫一些附加信息。使用服務在Angular中的不同應用程序的控制器之間傳輸數據

我的問題是,我每次從信息獲得服務對象後,它是undefined。當對象被設置時,我可以console.log(),這是正確的。

任何想法,我可能做錯了什麼?我假設這是因爲我認爲服務被注入時會創建一個新的實例。我怎樣才能讓數據持久?

我有頭版形式:

<div id="zipcodeForm" ng-app="form"> 
    <form name="zipcodeLookup" ng-controller="FormCtrl" novalidate="true" ng-submit="zipcodeLookup.$valid &amp;&amp; submitForm()"> 
     <div class="error" ng-show="zipcodeLookup.$dirty &amp;&amp; zipcodeLookup.$invalid"> 
      <span ng-show="zipcodeLookup.zipcode.$error.pattern || zipcodeLookup.zipcode.$error.required === true">Please enter a valid zip code.<br /></span> 
      <span ng-show="zipcodeLookup.residence.$error.required === true">Please choose a residency type.</span> 
     </div> 
     Enter Zipcode: 
     <input type="text" id="zipcode" name="zipcode" required="true" ng-pattern="/^\d{{5}}(-\d{{4}})?$/" ng-model="zipcode" ng-model-options="{{debounce: 1000}}"/><br /> 
     <input type="radio" name="residence" value="residential" ng-model="residence" ng-required="!residence"/> Residential 
     <input type="radio" name="residence" value="business" ng-model="residence" ng-required="!residence" /> Business 
     <br /> 
     <input type="submit" id="submitButton" value="Submit" /> 
    </form> 
</div> 

應用程序定義:

var app = angular.module('app', ['ui.router','formService']); 
var formApp = angular.module('form', ['formService']); 

表單控制器:

formApp.controller('FormCtrl', ['$scope', '$element', 'FormService', function($scope, $element, formService) { 

    $scope.zipcode = ""; 
    $scope.residence = ""; 

    $scope.submitForm = function() { 

     var obj, object, data = $element.serializeArray(); 

     obj = {}; 

     for (object in data) { 

      obj[data[object].name] = data[object].value; 

     } 

     formService.set(obj); 

     window.location = '/application'; 

    }; 

}]); 

首頁控制器:

app.controller('HomeCtrl', ['FormService', function(formService) { 

    var data = formService.get(); 

    console.log(data); 

}]); 

服務:

angular.module('formService', []) 
    .factory('FormService', function() { 

    var savedData = {}; 

    function set(data) { 

     savedData = data; 

    } 

    function get() { 

     return savedData; 

    } 

    return { 
     set: set, 
     get: get 
    }; 

}); 

回答

0

你是對的,有創造了兩個實例,每個應用程序定義。如果要在這兩個實例之間保存數據,則唯一的選擇是讀取和寫入在服務外部定義的全局變量。

但是,這當然不被推薦。我想知道爲什麼你必須使用兩個在一個頁面上引導的應用程序(我認爲至少是這樣)。有沒有辦法將兩個應用程序合併爲一個?如果是這樣,我會去實行這個策略。

+0

這兩個應用程序在單獨的頁面上,這是一種奇怪的場景。我們的CMS在主頁上使用XSLT,我有一個具有表單的模板,然後我有另一個頁面,它是使用另一個具有第二個應用程序(使用angular-ui路由)的XSLT模板的應用程序。所以我真的不認爲有一種方法可以讓他們在同一個應用程序中,但如果我錯了,隨時糾正我。 – 2014-11-21 21:01:02

+0

那麼它是不是一個角度的限制,但是HTML文件的性質。您可以選擇通過本地存儲,cookie保存數據,甚至通過url傳遞信息。每種策略都有其侷限性。節省的方法是將數據作爲會話數據或數據庫保存在Web服務器上。 – 2014-11-21 21:54:43

相關問題