2017-01-08 15 views
1

は、どのように私はこの機能を取得することができます:

現時点でのサービス/工場に私のコントローラに座っているので、私は複数でそれを使用することができます
$rootScope.$watch(function() { 
      return $mdMedia('md'); 
     }, function watchCallback(newValue, oldValue) { 
      $scope.detectScreen = $mdMedia('max-width: 1280px'); 
     }) 

コントローラ。

.factory('MyFactory', [ 
     '$rootScope', 
     '$mdMedia', 
     function ($rootScope, $mdMedia) { 

      return { 
       detectScreen: function (param) { 
       ***///get the function to work from here///*** 
       } 
      } 

     } 
    ]) 

答えて

0

また、あなたはapp.run()$watchを移動し、それはそれはあなたのコントローラでキャッチすることができます変更した場合、イベントを発することができました。

+0

申し訳ありません新しい角度に、あなたはいくつかのコード例を提供しなければならないので、私はあなたの提案に従うことができます。 –

2

時計なしで、工場内の関数を入れて:コントローラで

app.factory('MyFactory', ['$mdMedia', 
    function ($mdMedia) { 
     return { 
      detectScreen: function() { 
       return $mdMedia('max-width: 1280px'); 
      }; 
     } 
    } 
]); 

を、最新のスコープ変数を維持するために$doCheckLife-Cycle Hookを使用します。

app.controller("myController", function(myFactory, $scope) { 
    this.$doCheck = function() { 
     $scope.detectScreen = myFactory.detectScreen(); 
    }; 
}); 
+0

これはうまくいかない...! –

+0

問題を説明してください。どのバージョンのAngularを使用していますか?どのようなエラーメッセージが表示されますか?期待される行動は何ですか? – georgeawg

+0

私は角度1.6.1を使用しています。あなたのメソッドを実装するとき、画面サイズを検出しません。何もエラーはありません... –

1

私は私の問題を解決自己。それが懸念される人には、ここに答えがあります。 は、お使いのコントローラでこれを置く:

$scope.$watch(function() { 
      return CmsFactory.detectScreen(); 
     }, function watchCallback(small) { 
      $scope.detectScreen = small; 
     }) 

そして、これを自分の工場で:

return { 
     detectScreen: function() { 
      return $mdMedia('md'); 
     } 
    } 
関連する問題