2017-03-28 5 views
0

:ポスト修正親コンポーネント(Angularjs 1.5または1.6)から来ていない子コンポーネントデータを見る方法は?以下のコードで

var app = angular.module('app', []) 
    // navigation template 
app.component('onChanges', { 
     bindings: { 
     name: '<' 
     }, 
     template: '<h1>{{$ctrl.greeting}}</h1><br><h2>{{origin}}</h2> ', 
     controller: function($scope) { 
     $scope.origin = 'international'; 
     this.$onChanges = function(obj) { 
      if (obj.name && this.name) { 
      var prefix; 
      (obj.name.currentValue.toLowerCase() === 'thomas') ? 
      prefix = 'Howdy ': prefix = 'Hello '; 
      this.greeting = prefix + this.name; 
      (prefix === 'Hello ' || !prefix) ? $scope.origin = 'american': $scope.origin = 'australian'; 
      } 

      // if the name is undefined clear greeting 

      if (!this.name) { 
      this.greeting = '' 
      } 
     }; 

     $scope.$watch('$scope.origin', function() { 
      console.log("I am here"); 
     }) 

     } 
     }); 

:。私は$ scope.originの変更を監視するために$スコープ$ウォッチを使用しています。どうしたの?私の問題は、角1.5または1.6のコンポーネントを使用して、それらのための共通の問題である 、驚くべきことに、私はこれに関連するSO質問/答えを見つけることができません。https://plnkr.co/edit/DDZeTHQIji4FJnyhpQAJ?p=preview

オリジナルポスト: はこのPlunkerを試してみてください。

この場合、$ ctrl.originは親コンポーネントのデータではなく、$ ctrl.nameは親コンポーネントから子コンポーネントに渡されます。

私の理解によれば、 $ onChanges関数は$ ctrl.nameのみ見ることができます - 外部ソース、例えば親コンポーネントからコンポーネントに入るデータ。

私の質問:$ ctrl.originのようなコンポーネントのローカルデータの変更を監視するには - 親コンポーネントから渡されなかったデータ?例が役に立つかもしれません。

どうすればいいですか? https://plnkr.co/edit/DDZeTHQIji4FJnyhpQAJ?p=info

答えて

0

引用AngularJS:ここ

は私Plunkerある

$onChanges(changesObj) - Called whenever one-way bindings are updated. The 
changesObj is a hash whose keys are the names of the bound properties that 
have changed, and the values are an object of the form { currentValue, 
previousValue, isFirstChange() }. Use this hook to trigger updates within 
a component such as cloning the bound value to prevent accidental mutation 
of the outer value. 

だから、まずあなたのバインディングが一方通行であり、バインディングは、(あなたがこのケースではないので、存在することを確認してください$ onChangesは機能しません)。他のスコープからの変数を見ることに関しては、私は$時計が可能であると考えてい

$scope.$watch(
() => { // Old variable value; }, 
    '$ctrl.origin' => { 
    console.log('something changed on variable', variable-name, 'blah'); 
    } 
); 
+0

だから私の場合、私は右、ちょうど1.4の角のように見て$を使用する必要がありますか? – dowgwi

+0

私はあなたのケースではうまくいくと思います。試してみる。 – rrd

+0

投稿を少し修正します。 $ watchを使用しても動作しません。私のPlunkrを見てください:https://plnkr.co/edit/DDZeTHQIji4FJnyhpQAJ?p=preview $ watch($ scope.origin '、function .... – dowgwi

関連する問題