在AngularJS网页上自行调用javascript函数

时间:2015-10-27 12:44:28

标签: javascript angularjs

我有一个AngularJS网页的自调用功能。正如您所看到的,我有这个getData()函数,其作用是进行ajax调用以在页面加载时获取一些数据,以及随后根据用户与页面的交互。

<script type="text/javascript">
    // Should I defne it here like this completely outside the self invoking
    // function with or without var keyword
    getData = function (reqData) {
        alert(reqData); // Ajax call here...
    };

    (function () {

        // Should I defne it here like this? 
        getData = function (reqData) {
            alert(reqData); // Ajax call here...
        };

        //Should I have to use the var key word like so 
        var getData = function (reqData) {
            alert(reqData);// Ajax call here...
        };

        PatientCategoryController = function ($http, $scope, uiGridConstants) {

            // Should I defne it here like this inside the controller? 
            getData = function (reqData) {
                alert(reqData);// Ajax call here...
            };

            //Should I have to use the var key word inside the controller?
            var getData = function (reqData) {
                alert(reqData);// Ajax call here...
            };

            // Or should I define the function on the $scope object like so?
            $scope.getData = function (reqData) {
                alert(reqData);// Ajax call here...
            };

            angular.element(document).ready(getData('someDataToPass'));
        }
        PatientCategoryController.$inject = ['$http', '$scope', 'uiGridConstants'];
        angular.module('demoApp', ['ui.grid', 'ui.grid.autoResize', 'ui.grid.pagination']);
        angular.module('demoApp').controller('PatientCategoryController', PatientCategoryController);
    }());
</script>

我的问题是如何定义此功能?应该在$ scope对象上定义吗?或者应该与控制器相提并论?或者我应该在自调用函数之外完全定义它?

同样在类似的行中我应该定义javascript对象,它将保存ajax调用可能需要的数据。

我开始构建此页面,在某些时候,javascript开始表现得很糟糕,所以我不得不从头开始。这就是我提出这个问题的原因。 在过去,我已阅读并尝试了解javascript,但除了在浏览器方面,我还没有做过任何严肃的javascript编程。这个应用程序本身在Asp.Net mvc。所以我对javascript一直没有信心并且不断陷入困境。请指导我。

2 个答案:

答案 0 :(得分:5)

如果您希望此代码是为控制器编写的,那么您可以遵循我常用的这种模式。

(function () {
    'use strict';
    angular
        .module('moduleName')
        .controller('controllerName', controllerName);

    controllerName.$inject = ['$rootScope', '$scope'];

    function controllerName($rootScope, $scope) {
        var vm = this;
        //define your variables here

        activate();//self invoking method

        function activate(){
            //do whatever you want to do here
        }
    }
})();

希望这有帮助。

答案 1 :(得分:3)

这样的东西应该作为Angular服务创建,然后在需要时注入你的应用程序和控制器。

如果你想在世界各地提供全球可用的东西,这个问题Angular JS - Make service globally accessible from controllers and view应该会给你一些很好的指导。