2015-04-27 177 views
3

我已經寫了一個工廠來共享控制器之間的數據。這裏是樣本angularjs工廠數據共享

.factory('sharedData', function() { 
     var property = { 
      title: '', 
      color: '' 
     }; 

     return { 
      getTitle: function() { 
       return property.title; 
      }, 
      setTitle: function (title) { 
       property.title = title; 
      }, 
      getColor: function() { 
       return property.color; 
      }, 
      setColor: function (color) { 
       property.color = color; 
      } 
     }; 

我使用控制器來設置工廠使用的數據。

sharedData.setTitle("title"); 

,但是當我試圖撥打:

console.log(sharedData.getTitle()); 

我收到了空字符串。我已經在控制器中正確注入了服務。任何幫助表示讚賞。

編輯: 對不起,錯過了一個重要的信息。在成功完成REST調用代碼後,我正在設置數據如下。

var req = 
      { 
       method: 'GET', 
       url: "/titleName" 
       headers: { 
        'Content-type': 'application/json' 
       } 

      }; 
      $http(req) 
       .success(function (response, status) 
       { 
        console.log(status); 
        console.log(response[0].name); 
        sharedData.setTitle(response[0].name); 
        sharedData.setColor(response[1].color); 

       }) 
       .error(function (response, status) 
       { 
       }); 

JSON響應是如下:

[{"name":"Name"},{"color":"red"}] 

的console.log在成功回調是否給出正確的響應作爲名稱。謝謝

+3

可能有某種異步計時問題,需要查看更多使用代碼。創建一個複製問題 – charlietfl

+0

的演示可能不是一個理由,但是在你的例子中,在'setTitle'之後你忘記了'','' –

+0

沒有逗號不是從複製粘貼錯誤的問題,我會編輯問題 –

回答

0

//編輯

啊我看你使用一個異步方法。 所以是的,你應該回報成功的承諾和決心。

因爲控制器不知道它的異步與否,它只是期望一個值。

所以,當服務正在檢索數據時,控制器已經要求輸入數據。

然後您將返回一個空字符串。

當您返回承諾時,您可以在路由或控制器中解決此問題。

// Plunkr是舊的,因爲數據在問題上發生了變化 嗨,我創建了一個非常小的plunkr。

.controller('har', function(sharedData) { 
    sharedData.setTitle("test") 
    console.log(sharedData.getTitle()) 
    sharedData.setTitle("test2") 
    console.log(sharedData.getTitle()) 
}); 

http://plnkr.co/edit/CvKgKtGmjCDxtk4dcbtv?p=preview

檢查控制檯

我用你的工廠和一個簡單的控制器,對我來說看起來像它的工作。

你有任何其他的依賴關係,或者你有不同的使用方式嗎?

+0

yup,那麼它就會遇到問題,因爲它找到了另一個解決方案來處理http get中的promise。 –