2016-06-21 12 views
1

角度式の値をコンポーネントの属性に渡すにはどうすればよいですか?私はAPIから価値を取り戻しています。角度:コンポーネント属性に渡される式の評価

app.controller.js

$http.get(apiUrl).then(function(resp) { 
    $scope.name = resp.data.name; 
}) 
... 

person.component.js

export const Person = { 
    templateUrl: 'person.html', 
    bindings: { 
     firstName: '@' 
    }, 
    controller: function() { 
     console.log(this.firstName); 
    } 
} 

app.html

... 
<person first-name="name"> 

何らかの理由でそれがnameと評価されておらず、コンソールにundefinedが記録されています。

これで回避策がありますので、コントローラにTomを記録しますか?

何か助けていただければ幸いです。前もって感謝します!

私はセットアップがjsFiddle here

答えて

1

&が表現用できた、と@は、補間された文字列にあるので、渡された式を評価する必要があり

firstName: '&' 

、その後this.firstName()使用してみてください。

また、firstName$onInitまで初期化されていることが保証されていないため、実行する場合は

bindings: { 
    firstName: '&' 
}, 
controller: function() { 
    this.$onInit = function() { 
     console.log(this.firstName()); 
    } 
} 

期待どおりの結果が得られるはずです。参考のため

https://docs.angularjs.org/guide/component

$onInit() - 要素上のすべてのコントローラがを構築されていると、そのバインディングは



を初期化した後、各コントローラに呼び出されます編集:

あなたが提供した追加情報の後に、(式の代わりに)ただ1つの値を渡しているように見えるので、このケースの代わりに片方向バインディング(<)を使用して、 $onChangesの変更。私は潜在的な解決策を示すためにあなたのjsfiddleをフォークしました:http://jsfiddle.net/35xzeo94/

+0

私はAPIからデータを取り戻していると説明するべきだったので、読み込み時にすぐに利用できるわけではありません。私はjsFiddle [here](http://jsfiddle.net/d2m32gp4/5/)を設定しました – realph

+0

@realphそれは単なる変数であって式ではない場合、一方向の '<'バインディングを使用できます。この場合、値が更新されると '$ onChanges'が呼び出されます。しかし、それが真に表現であれば、コンポーネントのビューにない限り、更新された値を見ることはできません。これは、コンポーネントがこのように入力を持つことを意図していないため、それらは '@'または '<'であると考えられ、出力は '&'となるはずです。また、あなたのjsfiddleには、 'name =" name "の代わりに' name = "customerId" 'があります。 – CShark

+0

@realph私は自分の答えにあなたのjsfiddleをフォークして、それを行う方法を示しました。 – CShark

関連する問題