使用模态ng控制器作为常规控制器

Use a modal ng-controller as a regular controller

本文关键字:控制器 常规 ng 模态      更新时间:2023-09-26

我有一个模态视图(带angularui)使用的控制器。在某种程度上,我想将此控制器与自定义视图(而不是模态视图)一起使用。因此,除了解析变量(发送到控制器的变量)之外,一切都很好。

我这样称呼模态:

    var modalInstance = $modal.open({
        templateUrl: 'myModal.html',
        controller: 'modalCtrl',
        size: 'lg',
        resolve: {
            variable: function(){
                return myVar;
            }
        }
    });

如何从javascript(或html)发送变量?

以下是我如何引导我的自定义视图(custom.html):

angular.element($(document.body)[0].children[0]).attr('ng-controller','modalCtrl');
angular.bootstrap( document.body, [ 'myApp' ]);

实现这一点的一种方法是定义一个与解析名称相同的服务或值(在本例中为variable)。然后Angular会为您找到依赖项并将其注入。

您可能不希望始终定义此服务/值。因此,您可以在模块中定义此服务/值,然后在引导应用程序时有条件地加载该模块:

if (someCondition) {
  angular.module('use.me.conditionally', []).value('variables', 123);
  angular.element($(document.body)[0].children[0]).attr('ng-controller','modalCtrl');
  angular.bootstrap(document.body, ['myApp', 'use.me.conditionally']);
} else {
  angular.bootstrap(document.body, ['myApp']);
}

编辑:

您可以使用value()service()函数来声明具有许多属性的可注入对象:

var foo = { property1: 'abc', property2: 456 };
angular.module('use.me.conditionally',[])
    .value('variablesAsAValue', foo)
    .service('variablesAsAService', function() { return foo; });

请注意,您不需要同时使用value()service(),我只是展示了这两种方法。value()通常用于常量类型的变量,而服务通常是对象/类。