Хобрук: Ваш путь к мастерству в программировании

TypeError: Не удается прочитать свойство «открыть» неопределенного модального окна

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

TypeError: Невозможно прочитать свойство "open" неопределенного в Scope.$scope.openModal

Я надеялся, что кто-нибудь скажет мне, почему, вот соответствующий код:

Шаблон

<div ng-controller="View1Ctrl">
    <script type="text/ng-template" id="myModalContent.html">
        <div class="modal-header">
            <h3 class="modal-title">Item Details</h3>
        </div>
        <div class="modal-body">
            <ul ng-repeat="i in items">
                <li>Type: <span ng-bind="i.type"></span></li>
                <li>Description: <span ng-bind="i.description"></span></li>
                <li>Date: <span ng-bind="i.createDate"></span></li>
                <li>Priority: <span ng-bind="i.priority"></span></li>
                <li>Finished: <span ng-bind="i.isDone"></span></li>
            </ul>
        </div>
        <div class="modal-footer">
        <button class="btn btn-primary" ng-click="$close()">OK</button>
        </div>
    </script>
</div>

App.Js

'use strict';

// Declare app level module which depends on views, and components
angular.module('myApp', [
  //'ngRoute',
  'ui.router',
  'ui.bootstrap',
  'myApp.view1',
  'myApp.view2',
  'myApp.version',
  'myApp.items'
])
.config(function($stateProvider, $urlRouterProvider) {

    $urlRouterProvider.otherwise('/view1');

    $stateProvider  
    .state('view1', {
        url: '/view1',
        templateUrl: 'view1/view1.html',
        controller: 'View1Ctrl'
    })
    .state('view2', {
        url: '/view2',
        templateUrl: 'view2/view2.html',
        controller: 'View2Ctrl'
    });       
});

Контроллер

'use strict';

angular.module('myApp.view1', ['ngRoute'])
.config(['$routeProvider', function($routeProvider) {
    $routeProvider.when('/view1', {
        templateUrl: 'view1/view1.html',
        controller: 'View1Ctrl'
    });
}])
.controller('View1Ctrl', ['$scope','itemsService',function($scope,itemsService, $uiModal) {

    $scope.$on('itemSwitch.moreInfo', function(event, obj){
        $scope.openModal(obj);
    });

    $scope.openModal = function (obj) {

        var modalInstance = $uiModal.open({
            animation: $scope.animationsEnabled,
            templateUrl: 'templates/modalTemplate.html',
            controller: 'View1Ctrl',
            resolve: {
                items: function () {
                    return obj;
                }
            }
        });
    }
}]); //END

Может ли кто-нибудь указать мне правильное направление, чтобы решить эту проблему?

Спасибо


Ошибка исчезла, но теперь она не показывает ничего, кроме серого экрана, консоль показывает, что модальный html загружается, но не отображается должным образом.

введите здесь описание изображения


Ответы:


1

Ваша подпись инъекции неверна. Вам не хватает $uiModal. Соблюдайте следующие...

.controller('View1Ctrl', ['$scope', 'itemsService', 
    function($scope, itemsService, $uiModal) {

=>

.controller('View1Ctrl', ['$scope', 'itemsService', '$uiModal', 
    function($scope, itemsService, $uiModal) {

Я не совсем уверен в точном названии службы, которую вы собираетесь внедрить. Я предполагаю, что это основано на вашей переменной с именем $uiModal, однако я заметил документы утверждают, что это $uibModal. Вам нужно будет убедиться в этом.


В ответ на вашу обновленную недавно обнаруженную проблему, я считаю, что templateUrl: '' и <script id=""> должны совпадать. Попробуйте изменить тег <script> на следующий...

<script type="text/ng-template" id="templates/modalTemplate.html">
    <!-- <div> -->

Я наткнулся на это, играя с плункером по умолчанию, найденным в документации. Если оба значения не совпадают, возникает ошибка.

22.02.2016
  • Вы правы, но имя надо было поменять на uibModal, видимо поменяли. Недостатком является то, что когда я нажимаю кнопку, модальное окно не отображается (ошибок нет) 22.02.2016
  • хе-хе, только что отредактировал мой вопрос после того, как я посмотрел его в документах;) Не знаю, почему он может не отображаться, по крайней мере, ваша ошибка исчезла. Я могу посмотреть немного дальше... 22.02.2016
  • странно, я не уверен, глядя на то, что вы предоставили. Не могли бы вы поставить плунжер, который воспроизводит проблему? 22.02.2016
  • Я сделал все возможное, чтобы угадать, в чем проблема, но я немного в растерянности, так как первая проблема была исправлена. Хотя бы проверить мое отредактированное предложение? Надеюсь, поможет 22.02.2016
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

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

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

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

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..