1

私のapplication.jsファイルに私のAngularJSプロジェクト内で宣言されているサービスを持っています。それは次のようになります。AngularJSサービスがビューを更新していません

application.factory('interfaceService', function ($rootScope, $timeout) { 
    var interfaceService = {}; 
    interfaceService.lang = ""; 
    interfaceService.dev = "" 
    interfaceService.theme = ""; 
    interfaceService.integ = ""; 
    //For Integration Type 
    interfaceService.demo = function (dev, theme, integ, lang) { 
     this.dev = dev; 
     this.theme = theme; 
     this.integ= integ; 
     this.lang = lang; 
     this.broadcastItem(); 
    }; 
    interfaceService.broadcastItem = function() { 
     $timeout(function(){ 
      $rootScope.$broadcast('handleBroadcast'); 
     }); 
    }; 
    return interfaceService; 
}); 

私は私のControllersの2の間で変数を渡すために上記のサービスを使用しています。サービスを呼び出すコントローラはここにある:

 $scope.buildDemo = function() { 
      interfaceService.demo(device, template, integ, language); 
      $rootScope.template = template; 
      $rootScope.themeFolder = template; 
      $state.go("MainPage", { 
       "themeName": $rootScope.themeFolder 
      }); 
     } 

この関数は、ユーザーが自分のview

<div id='build-btn' ng-click='buildDemo()'>Go</div> 

上のdivをクリックしたときに、私が午前問題は、私の見解は、ときに更新されていないということですトリガされます私はボタンをクリックします。変更を確認するには、もう一度クリックする必要があります。誰がこれを引き起こしているか知っていますか? URLが更新され、新しいビューがページに表示されますが、「移動」ボタンを2回クリックするまで、サービスに設定されたパラメータに基づいて表示される要素は表示されません。

+0

だから、とき最初の[実行]ボタンをクリックします。コンソールにエラーがありますか?正しいテンプレートとコントローラがロードされていますか?はいの場合、コントローラーまでの距離はどのくらいですか?私はちょうどあなたの問題をトレースするためのアイデアを捨てている –

答えて

1

最初のクリックでhandleBroadcastイベントは放送されますが、「GO」ボタンを押すと状態遷移が発生し、テンプレートとそのコントローラが読み込まれるため、誰も受信しませんでした。コントローラーをインスタンス化すると、handleBroadcastイベントの$onを使用してリスナー・イベントを登録します。

コントローラ&の基になるビューがレンダリングされるまで、イベントをブロードキャストするのを待つことをお勧めします。これは、$state.goメソッドによって返された約束を利用することによって行うことができます。移行が成功すると完了する。あなたがGoボタンをクリックしたときに、それは...、ルートを変更するには、このルートに関連付けられているテンプレートとコントローラをロードし、このコントローラでロジックを実行する必要があり

コード

$scope.buildDemo = function() { 
    //state transition started. 
    $state.go("MainPage", { 
     "themeName": $rootScope.themeFolder 
    }).then(function() { 
     //state transition completed 
     //controller instance is available & listener is ready to listen 
     interfaceService.demo(device, template, integ, language); 
     $rootScope.template = template; 
     $rootScope.themeFolder = template; 
    }); 
} 
+0

ありがとうございました!それは私の問題を解決した – Javacadabra

+1

@ジャバカダブラそれを知ってうれしい..ありがとう&乾杯:-) –

関連する問題