Nano Hash - криптовалюты, майнинг, программирование

Как объявить модальное окно angular-bootstrap безопасным для минимизации способом

Я реализовал угловое модальное диалоговое окно, следуя рекомендациям, приведенным по адресу: http://angular-ui.github.io/bootstrap/. Приведенный ниже код отлично работает при доступе к неминифицированным файлам, но не работает при применении минимизации. Я сузил проблему до объявления функции modalInstanceCtrl ниже, однако мне не ясно, как я могу реализовать эту функцию в удобной для минимизации манере. Я попытался объявить функцию modalInstanceCtrl, используя стандартный синтаксис контроллера, но в этом случае функция не найдена вызовом $modal.open.

Сообщение об ошибке, которое я получаю от минимизированного кода: «TypeError: не удается прочитать значение свойства неопределенного».

Как лучше всего объявить этот контроллер, чтобы его можно было как минифицировать, так и вызывать из функции $modal.open?

Любая помощь будет принята с благодарностью.

lxModalSupportServices.factory('lxModalSupportService', 
    function ($modal, $log, $timeout) {

    var modalInstanceCtrl = function($scope, $log, $modalInstance) {
        $scope.ok = function () {
            $modalInstance.close();
        };
    };

    return {
        showCameraAndMicrophoneModalWindow : function(scope, htmlTemplate) {
            var ModalInstance = $modal.open({
                templateUrl: htmlTemplate,
                controller: modalInstanceCtrl
            });

    ....
    }
});

  • Зарегистрируйте контроллер в своем приложении и сообщите ему имя и имена/порядок параметров. например MainApp.controller(MyExample.Controls.Menu, [$element, $scope, MyExampleControls.Menu]);. есть и другие варианты, проверьте docs.angularjs.org/api/auto/service/ $инжектор 30.08.2014
  • Спасибо за ваш вклад. Я попытался добавить в код следующее объявление, но оно все еще терпит неудачу при минимизации: lxModalSupportServices.controller('ModalInstanceCtrl', ['$scope', '$log', '$modalInstance', ModalInstanceCtrl]); 30.08.2014
  • Интересно, связано ли это с тем, что моя система сборки (ворчание) минимизирует и комбинирует ui-bootstrap-tpls.js с кучей других угловых файлов javascript. Возможно, там есть что-то, что не было правильно свернуто и что проявляется только во время выполнения модального контроллера. Я продолжу расследование. 30.08.2014
  • Проблема в; Ваш контроллер принимает 3 параметра (имя), при минимизации имена параметров также изменяются, и angular больше не может выполнять внедрение зависимостей. Вы должны указать angular порядок параметров (обычно это делается с регистрацией контроллера, как упоминалось ранее). Есть несколько способов исправить это. Проверьте ссылку на форсунку. 30.08.2014
  • В дополнение к указанию lxModalSupportServices.controller('ModalInstanceCtrl', ['$scope', '$log', '$modalInstance', ModalInstanceCtrl]); вам также необходимо изменить $modal.open({...controller: ModalInstanceCtrl на ...controller: 'ModalInstanceCtrl' (обратите внимание на кавычки вокруг ModalInstanceCtrl). 30.08.2014
  • Спасибо, последний пункт — это то, чего мне не хватало, как описано в ответе, который я выбрал ниже. 30.08.2014
  • Привет, Марвин, в моей системе сборки grunt работает ngmin, который обычно занимается преобразованием определений стандартных функций в безопасные для минимизации объявления функций. Это довольно полезно и обычно отлично работает, но я думаю, что написал этот контроллер нестандартным образом, что сбило с толку скрипт ngmin. 30.08.2014
  • @AlexanderMarquardt: Кстати, ngmin устарел в пользу ng-annotate, поэтому вы можете использовать его вместо этого. 31.08.2014
  • @ExpertSystem спасибо за информацию. Я не знал об обесценивании ngmin. 31.08.2014

Ответы:


1

Измените декларацию на

var ModalInstanceCtrl = [
  '$scope', '$log', '$modalInstance',
  function($scope, $log, $modalInstance) {
    $scope.ok = function () {
      $modalInstance.close();
    };
  }
];

и попробуй еще раз. Если это все еще не удается, вероятно, проблема где-то еще.

Обычно я бы объявлял контроллер для $modal отдельно:

lxModalSupportServices.controller('AddCommentModalCtrl', ['$scope', function($scope) {
  'use strict';

  // Implementation...
});

Затем используйте его со строкой

$modal.open({
  templateUrl: htmlTemplate,
  controller: 'AddCommentModalCtrl',
});
30.08.2014
  • Спасибо за отличный ответ, который решил мою проблему! Оказывается, добавление имени контроллера в кавычки имеет решающее значение (и все еще отсутствовало в моей реализации) в дополнение к объявлению контроллера с использованием стандартного синтаксиса объявления контроллера в кавычках (последние два бита кода, которые вы написали). 30.08.2014
  • @AlexanderMarquardt Обычно лучше объявлять контроллер с помощью .controller() и использовать его с string. Это делает ваш код более модульным и тестируемым. Как вы упомянули ngmin, насколько я знаю, ngmin не поддерживает аннотирование внутренних инъекций (как в вашем случае). 31.08.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..