Правильно определить функцию виртуальной машины в контроллере как

#javascript #angularjs

#javascript #angularjs

Вопрос:

Я новичок в javascript и AngularJS.

Итак… Может быть, это глупый вопрос, но у меня есть два способа определения функций в javascript.

В следующем для контроллеров, пожалуйста, посмотрите на «grupoCancha» и «grupoVisible» (я вставил сценарий hole, потому что есть другая переменная, которая зависит от функции)

Контроллер:

 (function() {
'use strict';

angular
    .module('example.cancha')
    .controller('CanchaController', CanchaController);

CanchaController.$inject = ['$state', 'canchaService'];

function CanchaController($state, canchaService) {
    var vm = angular.extend(this, {
        canchasComplejo: [],
        grupoCancha: grupoCancha,
        grupoVisible: grupoVisible
        });



    (function activate() {
        cargarCanchasComplejo();

    })();

    //funcion que llama al servicio para obtener las canchas del complejo
    function cargarCanchasComplejo() {
        canchaService.obtenerCanchasComplejo()
            .then(function(canchasComplejo) {
                vm.canchasComplejo = canchasComplejo;
            });
    }


    function grupoCancha(canchaComplejo){
        if (vm.grupoVisible(canchaComplejo)) {
            vm.grupoMostrado = null;
        } 
        else {
          vm.grupoMostrado = canchaComplejo;
        }
    }

    function grupoVisible(canchaComplejo){
       return vm.grupoMostrado === canchaComplejo;
    }


}
})();
  

Другой способ довольно странный (может быть, потому, что я родом из Java). Но определение функции является сложным:

Контроллер 2:

 (function() {
'use strict';

angular
    .module('example.cancha')
    .controller('CanchaController', CanchaController);

CanchaController.$inject = ['$state', 'canchaService'];

function CanchaController($state, canchaService) {
    var vm = angular.extend(this, {
        canchasComplejo: []
        });



    (function activate() {
        cargarCanchasComplejo();

    })();

    //funcion que llama al servicio para obtener las canchas del complejo
    function cargarCanchasComplejo() {
        canchaService.obtenerCanchasComplejo()
            .then(function(canchasComplejo) {
                vm.canchasComplejo = canchasComplejo;
            });
    }

    vm.grupoCancha = function(canchaComplejo) {
        if (vm.grupoVisible(canchaComplejo)) {
            vm.grupoMostrado = null;
        } 
        else {
          vm.grupoMostrado = canchaComplejo;
        }
    };

    vm.grupoVisible = function(canchaComplejo) {
        return vm.grupoMostrado === canchaComplejo;
    };


}
})();
  

Не могли бы вы объяснить мне, какой способ лучше всего определять функции и почему?
Спасибо!!

Комментарии:

1. в чем ваш вопрос?? Можете ли вы объяснить мне, почему лучше всего определить функцию и почему? ПОЖАЛУЙСТА, ПРОВЕРЬТЕ СВОЙ АНГЛИЙСКИЙ!!

2. @Aravind Извините. Решаемая

3. Но можете ли вы сказать мне, в чем ваш вопрос?

4. @Aravind, просто: есть 2 способа написать одну и ту же функцию, см. Функцию «grupoCancha»: в первом контроллере написано иначе, чем во втором контроллере. Какая функция более рекомендуется?

Ответ №1:

Существует много способов написания Java Script. Однако придерживайтесь рекомендуемого использования, как указано в документации. Помните, что производительность является проблемой в крупномасштабных приложениях. Таким образом, минимизация — это способ ее достижения.

Я изменил ваш контроллер 1, который будет выглядеть так

 (function() {
'use strict';
angular
    .module('example.cancha')
    .controller('CanchaController', 
                ['$state', 
                'canchaService',
                CanchaController]);
/*Order of dependencies in both should be one and the same as it will be usefull for minification of your code*/

function CanchaController($state, canchaService) {
    var vm = this ;

        canchasComplejo: [],

        vm.grupoCancha=function (canchaComplejo){
                if (vm.grupoVisible(canchaComplejo)) {
                    vm.grupoMostrado = null;
                } 
                else {
                    vm.grupoMostrado = canchaComplejo;
                }
        }
    //funcion que llama al servicio para obtener las canchas del complejo
    ////Sugesting to use exception handling below as it makes a service call.
        vm.cargarCanchasComplejo=function() {
                canchaService.obtenerCanchasComplejo()
                        .then(function(canchasComplejo) {
                        vm.canchasComplejo = canchasComplejo;
                        });
        }

        vm.grupoVisible=function(canchaComplejo){
                return vm.grupoMostrado === canchaComplejo;
        }
    }
}());
  

Когда вы сокращаете этот код, он выглядит следующим образом

 !function(){"use strict";function a(a,b){var c=this;c.grupoCancha=function(a){c.grupoVisible(a)?c.grupoMostrado=null:c.grupoMostrado=a},c.cargarCanchasComplejo=function(){b.obtenerCanchasComplejo().then(function(a){c.canchasComplejo=a})},c.grupoVisible=function(a){return c.grupoMostrado===a}}angular.module("example.cancha").controller("CanchaController",["$state","canchaService",a])}();
  

Итак, я предлагаю вам руководство по стилю Angular от Джона Папы.

Надеюсь, это может вам помочь

Придерживайтесь одного шаблона, убедитесь, что команда работает по одному шаблону.

Надеюсь, это полезно 🙂.

Комментарии:

1. полезно ли это??

Ответ №2:

единственное отличие, которое я вижу, — это использование виртуальной машины с двумя последними функциями во втором примере кода. Когда вы используете

 function grupoVisible(canchaComplejo){
   return vm.grupoMostrado === canchaComplejo;
}
  

эта функция является закрытой для текущего кода JS вашего контроллера (поскольку ваш контроллер выполняется немедленно — (function(){})() ) и недоступна из HTML. Когда вы записываете его как

 vm.grupoVisible = function(canchaComplejo) {
    return vm.grupoMostrado === canchaComplejo;
};
  

к нему можно получить доступ позже в HTML через ng-controller=»CanchaController как cc», а затем cc.grupoVisible, например:

 <div ng-controller="CanchaController as cc">
  <button ng-if="cc.grupoVisible()">SOME BUTTON</button>
</div>