2017-02-17 13 views
0

htmlコードでコンポーネントを設定したい状況があります。私は次の構造を持っています。 game_idとして動作するようには思え正しく表示さgame.jsを、対応するゲーム7999コントローラからコンポーネントにデータを送信できません

<!doctype html> 
<html ng-app="myApp"> 
<head> 
<meta charset="utf-8"> 
<base href="/"> 
<title>Providence</title> 
<script src="/js/angular.js"></script> 
<script src="/data-access/data-access.module.js"></script> 
<script src="/data-access/data-access.service.js"></script> 
<script src="/score-info/score-info.module.js"></script> 
<script src="/score-info/score-info.component.js"></script> 
<script src="/js/game.js"></script> 
</head> 
<body> 
    <div ng-controller="myController"> 
     <p> {{ game_id }} </p> 
     <score-info game_id="{{ game_id }}"></score-info> 
    </div> 
</body> 

用ページを表示するべきexample.com/game/7999のようなURLにとして提供しています

game.html

angular.module('myApp', [ 
    'dataAccess', 
    'scoreInfo' ], 
    function($locationProvider){ 
     $locationProvider.html5Mode(true); 
    }); 
angular. 
module('myApp'). 
controller('myController', function($scope, $location) { 
    var split_res = $location.path().split('/'); 
    var game_id = split_res[split_res.length-1]; 
    $scope.game_id = game_id 
}); 

私の問題は、私がgame_idを注入できないコンポーネントにあります。ここにscore-info.component.jsがあり、game_idは表示されません。

angular. 
module('scoreInfo'). 
component('scoreInfo', { 
    templateUrl : '/score-info/score-info.template.html', 
    controller : function ScoreInfoController(dataAccess) { 
     self = this; 
     console.log(self.game_id) // self.game_id == undefined 
     dataAccess.game(self.game_id).then(function(game) { 
      self.game = game; 
     }); 
    }, 
    bindings : { 
     game_id : '<' 
    } 
}); 

以前の回答では、コントローラーとコンポーネントを配線する別のサービスを使用することをお勧めしていました。 1ページにさまざまな数のscoreInfoブロックを含める必要があるので、それは私のためには機能しません。

+0

使用 'gameIdなる: '<' '、及び使用' <スコア情報Game-ID = "{{game_id}}"> '。命名規則を尊重することは非常に重要です。 –

+0

命名規則を修正しても機能しません。それは問題ではないようです。 – Jari

+0

問題の少なくとも一部です。問題を再現した単純なプランを投稿してください。 –

答えて

0

私はこれに自分自身で答えるつもりです。答えはJB Nizetによってコメントで提供されました。

最初の問題は命名に関連していました。 <score-info game-id="game_id">

最後に、コンポーネントコントローラがで取る必要があります:コードはangular.js'命名規則に固執し、gameId: '<'を使用し、中括弧なしの要素内の参照を持っている必要がありますバインディングも<score-info game-id="game_id">

<を使用する必要があります口座開設には、1.5口座と1.6口座の間の変更が必要です。角度CHANGELOGを参照してください。具体ScoreInfoController

function ScoreInfoController(dataAccess) { 
     self = this; 
     self.$onInit = function() { 
      dataAccess.game(self.game_id).then(function(game) { 
       self.game = game; 
      }) 
     } 
関連する問題