AngularStrap——从一个服务中调用一个模态
AngularStrap - calling a modal from within a service?
我有一个使用AngularJS, Bootstrap 3和AngularStrap的web应用程序。在这个应用程序中,我之前使用的是Bootstrap UI的Bootstrap指令,但我需要迁移到AngularStrap,以获得一些额外的功能(比如为弹出窗口提供自定义模板的能力)。这个迁移改变了modal指令的实现方式,这是我所关心的问题。
在Bootstrap UI中,我有一个安全服务,可以在用户试图访问应用程序中受限制的内容时实现登录模式,利用另一个模块中定义的控制器。下面是我的代码的大致释义(其中大部分来自非常有用的种子项目angular-app):
// Login form controller:
angular.module('LoginForm', []).controller('LoginFormController', ['$scope', 'security', function($scope, security) {
/* $scope controller logic goes here. Things like login, cancel, clear, etc. */
}]);
// Security service:
angular.module('Security', ['ui.bootstrap','LoginForm']).factory('security', ['$modal', function($modal) {
var loginDialog = null;
function openLoginDialog() {
loginDialog = $modal.open({
templateUrl : 'security/login/form.tpl.html',
controller : 'LoginFormController'
});
loginDialog.result.then(onLoginDialogClose);
}
return {
showLogin : function() {
openLoginDialog();
}
};
}]);
现在,使用AngularStrap,我不知道如何利用我在LoginForm模块的LoginFormController中定义的控制器逻辑,因为使用AngularStrap,在初始化模态时没有controller
选项。有一个scope
参数,但我不确定如何最好地利用该参数在这种情况下。我认为模态的初始化应该是这样的:
// AngularStrap version of $modal:
loginDialog = $modal({
template : 'security/login/form.tpl.html',
scope : /* LoginFormController scope somehow injected here */
});
作为参考,这里是Bootstrap UI的文档:http://angular-ui.github.io/bootstrap/#/modal
对于AngularStrap: http://mgcrea.github.io/angular-strap/##modals
有可能这样做吗,还是只可能在AngularStrap的模板中调用$modal作为指令?
我发现在这里使用标准的ng-controller语法效果非常好。
不要在代码中设置控制器,而是在模板代码的根目录下使用属性:
<div class="modal" tabindex="-1" role="dialog" ng-controller="MyCustomModalController as ctrl">
...
<button class="btn btn-primary" ng-click="ctrl.ok()" >OK</button>
唯一的技巧是将数据共享回原始控制器。Bootstrap UI使用了一个非常好的回调,但在angular-strap中不起作用。解决方案是使用共享服务——这里已经详细介绍了:一个控制器可以调用另一个控制器吗?
- D3在一个调用中绘制不同的SVG形状,没有可见性
- jQuery/Javascript-是否可以获得链中的下一个调用
- 角度 2:使用一个 http 调用的结果来执行另一个调用
- AngularJs 从指令中的另一个调用控制器
- 如何运行一个调用某个函数的函数首先完成它,然后再调用下一个函数.正在创建回调函数
- 如何在Javascript中创建一个调用其他函数的函数
- 从同一对象中的另一个调用函数
- Angularjs元素在一个调用中同时查找select和input-这是单个标记查找的极限
- 制作一个调用'回调函数'
- 如何通过AngularJS中的一个调用在多个控制器($scope)中插入相同的数据
- Meteor 与 Session.set 和 jQuery 在一个调用中组合在一起
- 有没有办法在浏览器中停止HTTP AJAX调用,以便另一个调用可以继续
- 在 Ember.js 2.3 中,如何将 hasMany 异步调用编译为 ember 中的一个调用而不是多个调用
- 延迟链接 - 然后在上一个调用完成但出现错误时调用成功回调
- 一个 Javascript 函数,它创建一个调用函数本身的对象
- 如果我从JS调用SWF,它已经忙于处理来自JS的另一个调用,会发生什么
- 将全局onBeforeCall侦听器附加到除一个调用之外的所有AJAX调用
- Javascript只执行最后一个调用的函数
- jQuery在一个调用中验证远程解析两个字段
- 如何创建一个调用函数的函数