2014-08-27 103 views
0

我試圖與工廠共享兩個控制器之間的對象。我可以正確地存儲對象,但是當我試圖從主控制器獲取它時,它說對象是空的(未定義)。我希望得到一些反饋。無法獲得控制器之間共享的對象

var app = angular.module('wgot', ['ionic']) 

.config(function($stateProvider, $urlRouterProvider) { 

    $stateProvider 
    .state('splash', { 
     url: "/", 
     templateUrl: "templates/splashscreen.html" 
    }) 

    .state('settings', { 
     url: "/settings", 
     templateUrl: "templates/settings.html" 
    }) 

    .state('main', { 
     url: '/main', 
     templateUrl: 'templates/main.html' 
    }) 

    $urlRouterProvider.otherwise('/'); 

}) 

.factory('TT', function(){ 
    var savedData = {} 
    function set(data) { 
    savedData = data; 
    } 
    function get() { 
    return savedData; 
    } 
    return { 
    set: set, 
    get: get 
    } 
}) 

.controller('SettingsCtrl', function($scope, $http, TT){ 

    $scope.regions = [ 
    {name : 'United Arab Emirates', id : '23424738'} 
    ]; 

    $scope.region = $scope.regions[0]; 

    $scope.requestTT = function() { 
    $http.get(/* url */ + $scope.region.id).success(function (data){ 
     TT.set(data); 
    }) 
    }; 
}) 
.controller('MainCtrl', function($scope, TT){ 
    //Here TT.get() doesn't return the value that I've stored previously 
    $scope.words = TT.get(); 
    var words = []; 
    var listLength = $scope.words.list[0]['trends'].length; 
    for (var i = 0; i < listLength; i++) { 
    words[i] = $scope.words.list[0]['trends'][i].name; 
    }; 
    this.words = words; 
}); 

這是訪問量:

<ion-view class= "splashscreen" ng-controller="SettingsCtrl"> 
<ion-content class = "content" scroll="false"> 
<div class="bar bar-header bar-light"> 
    <h1 class="title">Settings</h1> 
</div> 
<div class="list card list-card"> 
    <label class="item item-input item-select"> 
     <div class="input-label"> 
     Country 
     </div> 
     <select ng-model="region" ng-options="region.name for region in regions"> 
     <option value="">-- choose a region --</option> 
     </select> 
    </label> 
    <a class="item item-icon-right assertive" ui-sref="main" ng-click="requestTT()"> 
     <i class="icon ion-radio-waves"></i> 
     Start receiving 
    </a> 
</div> 
</ion-content> 
</ion-view> 

這第二個控制器是一個不能獲取對象。

<ion-view class = "main"> 
    <ion-content> 
    <div class="os-phrases" ng-controller="MainCtrl as main"> 
     <h2 ng-repeat="word in main.words" ng-bind-html='word | lettering'></h2> 
    </div> 
    </ion-content> 
</ion-view> 

回答

1

我認爲問題是,你的時間在主控制器的服務中讀取數據,還沒有分配給它,來解決這一個方法是看在數據在您的主控制器內部的服務:

$scope.$watch(TT.get,function(v){ 
    $scope.words = v; 
}) 
+0

現在更有意義了,歡呼穆罕默德。 – Viconic 2014-08-27 16:07:50

+0

不客氣,很高興提供幫助。 – 2014-08-27 16:09:29