2016-12-13 16 views
1

私の質問は次のとおりです。 ng-ifや他のAngularディレクティブを使用して、条件が成立/真と等しいときに私のビューからコントローラ関数を呼び出す方法はありますか?このような角度:ng-ifまたは別のAngularディレクティブを使用してHTMLビューからコントローラ関数を呼び出すにはどうすればよいですか?

何か:

<div ng-if="dataHasBeenLoaded == 'true'" ng-init="configureWordCloudGraph()"></div> 

これは私が達成したいものです。

私のデータがロードされており、私のAPI呼び出しによって取得されたとき、私は設定したいです$scope変数($scope.dataHasBeenLoaded = true;)をtrueに設定します。そしてときに、この$scope変数===真、それは私のDOMに評価され、その後、私のコントローラに機能configureWordCloudGraph()を呼び出している:

$scope.configureWordCloudGraph = function() { 

    if ($scope.dataHasBeenLoaded) { 
     var data = $scope.wordCloudData; 
     $scope.twitterProfileWords = WordCloud.setUpTags(data.words); 
    } 

} 

は、これが私の見解です:

<div ng-controller="TwitterWordCloudController"> 
    <div id="word"> 
     <og-data-box heading="Most used words on Twitter" link="" uid="socialMentionsMeta" description=""> 
      <div class="dataStatus" ng-show="!dataContent">{{dataStatus}}<og-loading-indicator></og-loading-indicator></div> 
      <div class="dataContent" ng-show="dataContent" ng-mouseover="showGraphTrainingInfo()"> 
       <og-word-cloud words="twitterProfileWords"></og-word-cloud> 
       <div ng-if="dataHasBeenLoaded == 'true'" ng-init="configureWordCloudGraph()"></div> 
      </div> 
     </og-data-box> 
    </div> 
</div> 
+6

データをロードした後にコントローラで直接configureWordCloudGraph関数を呼び出さないのはなぜですか? –

+1

@PawełKozikowskiそれに私を打つ。 – phuzi

+0

コントローラーを呼び出す方法が正しいです。あなたは何を得ていますか? – selvassn

答えて

0

を、HTMLビューからの角度コントローラを呼び出す方法は以下の通りですs:

注:私は3つのコードで分解します。ちょうどHTMLメソッド呼び出し、コントローラメソッド、コントローラメソッド呼び出しを含む完全なHTMLコード。

ただ、HTMLコントローラメソッドの呼び出しコード:

<div ng-if="dataHasBeenLoaded == 'true'" ng-init="configureWordCloudGraph()"></div> 

コントローラ方法:

$scope.configureWordCloudGraph = function() { 

    if ($scope.dataHasBeenLoaded) { 
     var data = $scope.wordCloudData; 
     $scope.twitterProfileWords = WordCloud.setUpTags(data.words); 
    } 

} 

HTMLビューコントローラのメソッドの呼び出し:

<div ng-controller="TwitterWordCloudController"> 
    <div id="word"> 
     <og-data-box heading="Most used words on Twitter" link="" uid="socialMentionsMeta" description=""> 
      <div class="dataStatus" ng-show="!dataContent">{{dataStatus}}<og-loading-indicator></og-loading-indicator></div> 
      <div class="dataContent" ng-show="dataContent" ng-mouseover="showGraphTrainingInfo()"> 
       <og-word-cloud words="twitterProfileWords"></og-word-cloud> 
       <div ng-if="dataHasBeenLoaded == 'true'" ng-init="configureWordCloudGraph()"></div> 
      </div> 
     </og-data-box> 
    </div> 
</div> 
1

簡単な方法が可能dataHasBeenLoadedを見てたときに真configureWordCloudGraphを起動するには:selvassnからのコメントを1として

var deregister = $scope.$watch('dataHasBeenLoaded', function() { 
    if($scope.dataHasBeenLoaded) { 
     configureWordCloudGraph(); 
     deregister(); 
    } 
}) 
+0

良いアイデアのように聞こえます。ありがとうございました。 – onmyway

+0

しかしパフォーマンスの面では最高です。 –

+0

dataHasBeenLoadedがtrueのときにウォッチャーが起動され、ウォッチャーが「非アクティブ」になりパフォーマンスに影響を与えないようにメソッドが登録を解除する – Silvinus

関連する問題