2014-11-19 5 views
0

Я использую проект ngDialog, чтобы отобразить всплывающее окно на моем сайте. Я загрузил проект zip из github, он поставляется с примерами данных, это работает, но когда я работаю с внешними шаблонами и контроллером, он не работает. Я уже ищу решения для SO, но все, похоже, забывают включить ngDialog, который не мой случай (если я буду тупыми людьми на земле)Ошибка с ngDialog

Вот мой код:

в index.html:

<html lang="en" ng-app="blackoutApp"> 
... 
<div id="body" ng-view></div> 

в controllers.js файла:

var blackoutApp = angular.module('blackoutApp', ['ngRoute', 'ngDialog']); 

blackoutApp.config(['$routeProvider', 'ngDialogProvider', function($routeProvider, ngDialogProvider) { 
    $routeProvider.when('/', { 
    templateUrl: 'templates/Body.tpl.html', 
    controller: 'BodyCtrl' 
    }); 
    ngDialogProvider.setDefaults({ 
    className: 'ngdialog-theme-default', 
    plain: false, 
    showClose: true, 
    closeByDocument: true, 
    closeByEscape: true, 
    appendTo: false, 
    preCloseCallback: function() { 
     console.log('default pre-close callback'); 
    } 
    }); 
}]); 

blackoutApp.controller('OpenCtrl', ['$scope', function ($scope) { 
    $scope.name = "Popup"; 
}]); 
blackoutApp.controller('BodyCtrl', ['$scope', function ($scope, $rootScope, ngDialog) { 
    $scope.menus = [ 
     {'link' : '#/', 'name' : 'main'}, 
    ]; 
    $scope.videoButtons = [ 
    {'class' : 'tubular-play', 'name' : 'Play'}, 
    {'class' : 'tubular-pause', 'name' : 'Pause'}, 
    ]; 
    $scope.open = function() { 
    ngDialog.open({template: 'templates/Popup.tpl.html', controller: 'OpenCtrl'}); 
    }; 
}]); 

И Bdoy.tpl.html:

<div class="container"> 
    <div class="grid"> 
     <div class="center" id="coverEvent"></div> 
     <div class="center"><a id="mapInfo" class="active" href="#"></a></div> 
     <div> 
      <a href="" ng-click="open()">Open via service</a> 
     </div> 
    </div> 
</div> 

Все мои скрипты включены в конце моего index.html тела тега. Когда я нажимаю на моей ссылке Open via service я получил эту ошибку:

TypeError: Cannot read property 'open' of undefined at k.$scope.open (http://nico.local:5757/Blackout/js/controllers.js:36:13) at http://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js:177:68 at f (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js:194:174) at k.$eval (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js:112:68) at k.$apply (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js:112:346) at HTMLAnchorElement.<anonymous> (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js:194:226) at HTMLAnchorElement.p.event.dispatch (http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js:2:37944) at HTMLAnchorElement.g.handle.h (http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js:2:33888)

ответ

0

заменить 'BodyCtrl' этим:

blackoutApp.controller('BodyCtrl', 'ngDialog', ['$scope', function ($scope, $rootScope, ngDialog) { 
 
    $scope.menus = [ 
 
     {'link' : '#/', 'name' : 'main'}, 
 
    ]; 
 
    $scope.videoButtons = [ 
 
    {'class' : 'tubular-play', 'name' : 'Play'}, 
 
    {'class' : 'tubular-pause', 'name' : 'Pause'}, 
 
    ]; 
 
    $scope.open = function() { 
 
    ngDialog.open({template: 'templates/Popup.tpl.html', controller: 'OpenCtrl'}); 
 
    }; 
 
}]);

-1
blackoutApp.controller('BodyCtrl', [ 
'$scope', '$rootScope', 'ngDialog', function ($scope, $rootScope, ngDialog) { ... } 
]); 
1

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

blackoutApp.controller('BodyCtrl', ['$scope', '$rootScope', 'ngDialog', function ($scope, $rootScope, ngDialog) { 
    $scope.menus = [ 
     {'link' : '#/', 'name' : 'main'}, 
    ]; 
    $scope.videoButtons = [ 
     {'class' : 'tubular-play', 'name' : 'Play'}, 
     {'class' : 'tubular-pause', 'name' : 'Pause'}, 
    ]; 
    $scope.open = function() { 
     ngDialog.open({template: 'templates/Popup.tpl.html', controller: 'OpenCtrl'}); 
    }; 
}]);