Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pass jQuery dependency to angular js controller

I am using angularjs 1.4, and in one of my angular controller I have to use jQuery. but when I am trying to pass it as dependency, it is not working.

I tried below code, but no success

(function () {
    'use strict';

    var app= angular.module('app');

    app.controller('getUserInfo', ['jQuery',
        function($) {
         // some logic
    }]);
})();

I also tried below code, but no success

(function () {
    'use strict';

    var app= angular.module('app');

    app.controller('getUserInfo', ['$',
        function($) {
         // some logic
    }]);
})();

Can some please guide what I am doing wrong.

like image 246
Neha Jain Avatar asked Dec 21 '15 19:12

Neha Jain


2 Answers

You could create your own constant inside your app module & then you can inject that dependency where ever you want.

app.constant('jQuery', window.jQuery)

I chosen constant, because It would be available to inject its dependency inside config phase of angular.

(function () {
    'use strict';

    var app= angular.module('app');

    app.controller('getUserInfo', ['jQuery',
        function($) {
         // $ will provide you all jQuery method available in it.
         //but don't do DOM manipulation from controller.
         //controller is not the correct place to play with DOM.
    }]);
})();

But as you wanted to inject dependency of jQuery inside a controller, I'd say NO. Don't do that. Basically you shouldn't do any DOM manipulation from the controller. You can do that from the directive, which has capability to playing in better way with DOM.

like image 85
Pankaj Parkar Avatar answered Nov 18 '22 14:11

Pankaj Parkar


If you load jQuery.js before angular.js, AngularJS will make it available as angular.element and add Angular specific methods as well.

app.controller('getUserInfo', function() {
     var $ = angular.element;
     // some logic
}]);

From the Docs:

If jQuery is available, angular.element is an alias for the jQuery function. If jQuery is not available, angular.element delegates to Angular's built-in subset of jQuery, called "jQuery lite" or jqLite.

For more information see the AngularJS angular.element API Reference.

like image 42
georgeawg Avatar answered Nov 18 '22 16:11

georgeawg