javascript - 来自服务/工厂的 $mdMedia Angular $watch 屏幕尺寸

标签 javascript angularjs angular-material

我怎样才能得到这个功能:

$rootScope.$watch(function () {
            return $mdMedia('md');
        }, function watchCallback(newValue, oldValue) {
            $scope.detectScreen = $mdMedia('max-width: 1280px');
        })

目前它位于我的 Controller 中,成为一个服务/工厂,因此我可以在多个 Controller 中使用它。

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

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

       }
    ])

最佳答案

在没有 watch 的情况下将功能放入工厂:

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

在 Controller 中,使用$doCheck Life-Cycle Hook使范围变量保持最新:

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

关于javascript - 来自服务/工厂的 $mdMedia Angular $watch 屏幕尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41531214/

相关文章:

javascript - chart.js 不允许使用对数刻度的 y 轴步长

javascript - 如何构建 Angularjs/Leaflet/Node.js 应用程序

javascript - knockout : observableArray of arrays of observable inputs

javascript - 是否有用于创建图形的 JavaScript 库?

javascript - 将 ng-click 值传递给一个 Controller 并在另一个 Controller 中使用它

javascript - 如何在 Angular JS 中将我的表字符串解析为 html 表?

angular - 空注入(inject)器错误: No provider for ElementRef

javascript - Angular Material - sidenav 组件无法正常工作

javascript - CSS 不适用于 rzslider

javascript - 在 VueJS 中模拟子组件的 $emit 事件