Search code examples
javascriptjqueryangularjsangularjs-directiveangularjs-scope

angularjs if/else statement and window width


I am new to AngularJS and recently introduced it into my application. I am trying to re-write some of my existing jQuery code in my controllers, however, on one occasion, i am using:

jQuery:

if ($(window).width() < 700) {

   $('.productsHeading').on('click', function() {

       $(".productsBody").hide();
       $(".aboutUsBody").show();

   });
}

I can get around the .hide() and .show() using ng-hide="productsBody" and ng-hide="aboutUsBody" within my DIVs.. These are handled through a ng-click="productsheading()".. However, the issue i am facing is, how do i handle the:

if ($(window).width() < 700) {

In AngularJS? I am using AngularJS v1.1.5


Solution

  • In AngularJS if you want to do changes in HTML or DOM manipulation then recommended or best practices is to use the directive for the same.

    Write a directive may be below links are helpful:

    AngularJS event on window innerWidth size change

    http://jsfiddle.net/jaredwilli/SfJ8c/

    HTML for the Directive

    <div ng-app="miniapp" ng-controller="AppController" ng-style="style()" resize>window.height: {{windowHeight}}
        <br />window.width: {{windowWidth}}
        <br />
    </div>

    Javascript Code for the Directive

        app.directive('resize', function ($window) {
        return function (scope, element) {
            var w = angular.element($window);
            scope.getWindowDimensions = function () {
                return {
                    'h': w.height(),
                    'w': w.width()
                };
            };
            scope.$watch(scope.getWindowDimensions, function (newValue, oldValue) {
                scope.windowHeight = newValue.h;
                scope.windowWidth = newValue.w;
    
                scope.style = function () {
                    return {
                        'height': (newValue.h - 100) + 'px',
                            'width': (newValue.w - 100) + 'px'
                    };
                };
    
            }, true);
    
            w.bind('resize', function () {
                scope.$apply();
            });
        }
    })