【问题标题】:Angular ui modal with controller in separate js file带有控制器的角度 ui 模态在单独的 js 文件中
【发布时间】:2014-10-25 03:35:34
【问题描述】:

我正在尝试制作一个可以从应用程序中的多个位置实例化的模态。从此处给出的示例中:Angular directives for Bootstrap 模态控制器与实例化模态的控制器位于同一文件中。我想将模态控制器与“app”控制器分开。

index.html:

<!DOCTYPE html>
<html ng-app="modalTest">

  <head>
    <link rel="stylesheet" type="text/css" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
  </head>

  <body ng-controller="modalTestCtrl">
    <button ng-click="openModal()">Modal</button>

    <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.20/angular.min.js"></script>
    <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.10.0/ui-bootstrap.min.js"></script>
    <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.10.0/ui-bootstrap-tpls.min.js"></script>
    <script type="text/javascript" src="modalTest.js"></script>
  </body>

</html>

控制器:

var app = angular.module('modalTest', ['ui.bootstrap']);

app.controller('modalTestCtrl', ['$scope', '$modal', function($scope, $modal) {
    $scope.openModal = function() {
        var modalInstance = $modal.open({
            templateUrl: 'modal.html',
            controller: 'modalCtrl',
            size: 'sm'

        });
    }
 }]);
// I want this in another JavaScript file... 
app.controller('modalCtrl', ['$scope', function($scope) {
    $scope.hello = 'Works';
}]);

modal.html:

<div ng-controller="modalCtrl">
    <div class="modal-header">
        <h3 class="modal-title">I'm a modal!</h3>
    </div>
    <div class="modal-body">
        <h1>{{hello}}</h1>
    </div>
    <div class="modal-footer">
        <button class="btn btn-primary" ng-click="ok()">OK</button>
        <button class="btn btn-warning" ng-click="cancel()">Cancel</button>
    </div>
</div>

有没有办法将 modalCtrl 放入另一个 JavaScript 文件中,并以某种方式将控制器 (modalCtrl) 注入到 modalTestCtrl 中?

BR

【问题讨论】:

  • 我猜你可能想为此使用指令,除非有特定原因你必须使用控制器
  • 假设模态是登录模态,当会话超时时,必须显示模态。那么模态控制器必须拥有所有的登录逻辑

标签: javascript angularjs controller angular-ui-bootstrap


【解决方案1】:

当然,你可以做到。首先你应该使用函数声明。

// modalCtrl.js
// This file has to load before modalTestCtrl controller
function modalCtrl ($scope) {
   $scope.hello = 'Works';
};

然后,将 modalTestCtrl 更改为:

app.controller('modalTestCtrl', ['$scope', '$modal', function($scope, $modal) {
$scope.openModal = function() {
    var modalInstance = $modal.open({
        templateUrl: 'modal.html',
        controller: modalCtrl, //This must be a referance, not a string
        size: 'sm'

    });
}
}]);

通过上述更改,您的代码必须工作。

【讨论】:

  • 很高兴为您提供帮助。
  • 迷你警告:modalCtrl 函数必须直接在 modalCtrl.js 中声明,而不是在自执行函数中声明:D(它困扰了我 15 分钟,直到我注意到:D)
猜你喜欢
  • 2017-06-03
  • 1970-01-01
  • 1970-01-01
  • 2016-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-27
  • 2020-09-03
相关资源
最近更新 更多