2016-04-27 2 views
0

サービスから返された配列の項目をテンプレートに表示するのに問題があります。私はコントローラをシンタックスとして正しく使用していると考えています。コントローラ、テンプレート、および自分の.config()$ state(ui-router)ブロックで使用されています。しかし何らかの理由でページ上に何も表示されません。角度コントローラがサービスオブジェクトのプロパティng-repeatをバインドしていません

私はクロムでデバッグしようとしましたが、コントローラにブレークポイントを置いたとき、vm.processesがオブジェクトを保持しましたが(4つのアイテムを持つ配列すべてがチェックアウトされました)、再び何も表示されませんでした/ c vm。コントローラー内の何かを公開するので、テンプレートからアクセスできる必要があります。

私はトラブル$ HTTPを使用してファイル自体をつかんを持った、JSONオブジェクトを返す単純なサービスを定義したので、私はちょうどサービスファイルの値をハードコーディングすることにしました:

.factory('dataservice', function dataservice($http) { 
     return { 
      getProcesses: getProcesses 
     }; 

     function getProcesses() { 
      // return $http.get('data\processes.json') 
      //  .then(getProcessesComplete) 
      //  .catch(getProcessesFailed); 

      // function getProcessesComplete(response) { 
      //  return response.data.results; 
      // } 

      // function getProcessesFailed(error) { 
      //  console.log('Error retrieving processes. ' + error.data); 
      // } 

      return { 
       "processes": [ 
        { 
         "name": "mergeFiles", 
         "id": 1, 
         "description": "Merge files in /files on server 3", 
         "scheduledRun": { 
          "startTime": "2016-06-27T18:25:00", 
          "endTime": "2016-06-27T18:26:00" 
         } 
        }, 
        { 
         "name": "monthlyImport", 
         "id": 2, 
         "description": "Import records on server 1", 
         "scheduledRun": { 
          "startTime": "2016-06-01T12:00:00", 
          "endTime": "2016-06-01T18:05:00" 
         } 
        }, 
        { 
         "name": "tickeTrakBilling", 
         "id": 3, 
         "description": "...", 
         "scheduledRun": { 
          "startTime": "2016-06-27T19:15:00", 
          "endTime": "2016-06-27T18:20:00" 
         } 
        }, 
        { 
         "name": "batch092", 
         "id": 4, 
         "description": "run batch092.bat on server 4", 
         "scheduledRun": { 
          "startTime": "2016-06-27T1:25:00", 
          "endTime": "2016-06-27T11:26:00" 
         } 
        } 
       ] 
      }; 
     } 
    }); 

今コントローラであります構文ように、コントローラを使用して書かれた以下の通り

controller('ProcessController', ProcessController); 

function ProcessController(dataservice) { 
    var vm = this; 
    var dataService = dataservice; 

    vm.processes = dataService.getProcesses(); 
} 

今コントローラは、JSONオブジェクトを

を露出させるべきテンプレートは次のとおり

<div class="container" ng-controller="ProcessController as vm"> 
<div class="job" ng-repeat="process in vm.processes"> 
    <!-- Header [Job Name] --> 
    <h3 class="job-name">{{ process.name }}</h3> 
    <!-- Body [Job details] --> 
    <div class="container"> 
     <p>{{ process.description }}</p> 
     <ul class="job-details"> 
      <li> 
       {{ process.scheduledRun.startTime }} 
      </li> 
      <li> 
       {{ process.scheduledRun.endTime }} 
      </li> 
     </ul> 
    </div> 
</div> 

次のような状態が定義されています

   .state('process', { 
       url: '/:month/:date', 
       templateUrl: '/app/templates/process.html', 
       controller: 'ProcessController', 
       controllerAs: vm 
      }); 

答えて

0

、のようになります。テンプレートのHTMLにあなたのng-controllerを削除し、あなたのコードは動作します: HTML controllerAsが動作しないいくつかのケースでも

<div class="container"> 
    <div class="job" ng-repeat="process in vm.processes"> 
    <!-- Header [Job Name] --> 
    <h3 class="job-name">{{ process.name }}</h3> 
    <!-- Body [Job details] --> 
    <div class="container"> 
     <p>{{ process.description }}</p> 
     <ul class="job-details"> 
     <li> 
      {{ process.scheduledRun.startTime }} 
     </li> 
     <li> 
      {{ process.scheduledRun.endTime }} 
     </li> 
     </ul> 
    </div> 
    </div> 
</div> 

。その場合はcontroller: ProcessController as vmというシンタックスを使用してください。

+0

私は両方を持つことはできませんでしたが、 $ stateProviderで定義済みの場合は意味があります。残念ながら、これは私の問題を解決しませんでした。 2つの李のショーはそこに何もないが、2つの弾丸ポイント。 – n0tion

+0

これはあなたのサービスからオブジェクト '{processes:[]}'を返して、それを配列 'vm.processes'に割り当てるからです。サービスからの応答を配列に変更するか、コントローラ内でコードを 'vm.processes = dataService.getProcesses()。processes'と変更してください。 –

+0

うわー、私は完全にそれを逃しました。テスト目的のために、オブジェクトを保持し、ドット表記を使用して配列にアクセスするか、単純に配列をサービスから返す方がよいと思いますか? – n0tion

0

は、このようなあなたのコントローラを書いて、結果を確認してください。

app.controller('ProcessController', ['dataservice', function(dataservie){ 
    var vm = this; 
    var dataService = dataservice; 

    vm.processes = dataService.getProcesses(); 
}]); 
+0

コントローラの登録時に依存関係を手動で注釈するのではなく、順序が混乱する可能性があるからです。しかし、私はこのようにしましたが、それは何も表示されませんでした。私は何が問題になるのかわからない – n0tion

+0

あなたを助けることができるように、あなたのコードをplunkerまたはjsfiddleにアップロードしてください。 – Laxminarayan

+0

この質問に関係のない他のファイルに依存しているため、コードの一部を変更する必要がありました。 https://plnkr.co/ZHCydSbiOOVKjRC6WCrf – n0tion

0

以下のようにコントローラの上にdataserviceを注入してみます。

ProcessController.$inject = ['dataservice']; 

だからあなたのコントローラは、あなたがng-controllerとともに$routePovider$stateProviderを使用して定義controller as構文を使用することはできません

controller('ProcessController', ProcessController); 

ProcessController.$inject = ['dataservice']; 

function ProcessController(dataservice) { 
    var vm = this; 
    var dataService = dataservice; 

    vm.processes = dataService.getProcesses(); 
} 
+0

返信いただきありがとうございます。私はdataserviceを$ injectに渡してみましたが、まだプロセス配列を表示していませんでした – n0tion

関連する問題