2015-09-13 70 views
0

我在工廠,控制器和視圖之間的數據同步時遇到問題。會發生什麼是變量$ scope.supermarket在視圖加載後初始化。控制器 - 工廠視圖同步

我已經實現工廠是這樣的:

var main_module = angular.module("myApp", ["ngRoute"]); 
main_module.factory('dataFactory', ["$http", "$q", function($http, $q){ 

    var dataFactory = {}; 
    dataFactory.getSupermarkets = function(){ 
     var defer = $q.defer(); 
     $http.get("http://127.0.0.1:8000/supermarkets/") 
      .then(function(response){ 
       defer.resolve(response.data); 
      }, function(error){ 
       defer.reject(error); 
      }); 

     return defer.promise; 
    }; 

    dataFactory.getEmployees = function(){ 
     var defer = $q.defer(); 
     $http.get("http://127.0.0.1:8000/employees/") 
      .then(function(response){ 
       defer.resolve(response.data); 
      }, function(error){ 
       defer.reject(error); 
      }); 

     return defer.promise; 
    }; 

    return dataFactory; 
} 

,這是我的控制器實現:

(function() { 
'use strict'; 
var main_module = angular.module("myApp"); 

main_module.controller("EmployeeController", ["$scope", "$http", "dataFactory", function($scope, $http, dataFactory){ 

    $scope.employees = []; 
    dataFactory.getEmployees().then(function(data){ 
      $scope.employees = data; 
     }, function(error){ 
      lert(JSON.stringify(error)); 
     } 
    ); 
    $scope.supermarkets = []; 
    dataFactory.getSupermarkets().then(function(data){ 
      $scope.supermarkets = data; 
     }, function(error){ 
      alert(JSON.stringify(error)); 
     } 
    ); 
}]); 

}()); 

視圖部分使用$ scope.supermarket變量是這樣的:

<div class="form-group"> 
    <label class="control-label col-sm-2">SUPERMARKET:</label> 
    <div class="col-sm-5"> 
     <select class="form-control" ng-options="s.name in supermarkets" ng-model="newEmployee.supermarket"></select> 
    </div> 
</div> 

加載視圖後,select字段始終爲空。

我仍然在學習AngularJS的過程中,所以任何幫助將非常感激。

+1

控制檯中的任何錯誤?你檢查了網絡標籤,看看是否發送了超市的請求,並且它是否返回了一個非空數組?你有沒有試過調試你的代碼?請注意,您的承諾代碼使用反模式。使用鏈接:'return $ http.get('...')。then(function(response){return response.data;});' –

+0

好吧,我按照你的建議重新實現了我的兩個工廠方法, - 選項部分作爲@Moncef Hassein-bey說,它現在起作用。謝謝! – Alen

回答

0

你是不是在returnig的的DataFactory當地的DataFactory對象。

var main_module = angular.module("myApp", ["ngRoute"]); 
main_module.factory('dataFactory', ["$http", "$q", function($http, $q){ 

    var dataFactory = {}; 
    dataFactory.getSupermarkets = function(){ 
     var defer = $q.defer(); 
     $http.get("http://127.0.0.1:8000/supermarkets/") 
      .then(function(response){ 
       defer.resolve(response.data); 
      }, function(error){ 
       defer.reject(error); 
      }); 

     return defer.promise; 
    }; 

    dataFactory.getEmployees = function(){ 
     var defer = $q.defer(); 
     $http.get("http://127.0.0.1:8000/employees/") 
      .then(function(response){ 
       defer.resolve(response.data); 
      }, function(error){ 
       defer.reject(error); 
      }); 

     return defer.promise; 
    }; 

    return dataFactory; // missing 
} 

不是相對於這個問題:你爲什麼定義var main_module?我不認爲需要這個。

+0

對不起,我忘了複製該行。它實際上在那裏。我編輯了這個問題。 我會刪除該宣言行,謝謝。 – Alen

+1

+1,@JB Nizet包含您的控制檯錯誤。但是,我還可以看到ng選項中的另一個問題,它應該是這樣的:ng-options =「s.name for s in supermarkets」 –

+0

我按照最後一條評論的建議編輯了視圖。這是我的服務器響應: { 「數據」:[{ 「ID」:1, 「名」: 「超級市場」, 「位置」: 「在某處」}], 「狀態」:200, 「配置」: { 「方法」: 「GET」, 「transformRequest」:[空], 「transformResponse」:[空], 「URL」: 「http://127.0.0.1:8000/supermarkets/」, 「標題」:{」接受 「:」 應用/ JSON,純文本/,*/* 「},」 狀態文本 「:」 OK「} – Alen

0

我已經看到了這幾個代碼錯誤。

1.您未添加納克控制器指令到視圖中。 https://docs.angularjs.org/guide/controller

2.newEmployee.supermarket在$ scope中缺失。請參閱角度文檔 https://docs.angularjs.org/api/ng/directive/ngModel

嘗試在視圖中打印響應 {{newEmployee.supermarket | json}}

+0

我使用$ routeProvider將控制器設置爲視圖。我提供的代碼部分只是視圖和控制器的一部分,因此實際上定義了newEmploye。 – Alen