在ngDialog中将变量发送到控制器('resolve')

时间:2015-01-13 11:04:07

标签: angularjs ng-dialog

使用ngDialog打开模态的简单方法是:

ngDialog.open({
    template: 'template.html',
    controller: 'someCtrl'
})

如何将变量发送到'someCtrl'?

在ngDialog中有'解析'这样的东西吗?

angular-bootstrap模式的示例:

$modal.open({
    template: "<p>This is template</p>",
    controller: "someCtrl",
    resolve: {
        someVar: function(){
            return "Value of someVar"
        }
    }
})

这将打开模态将'someVar'发送给负责的Controller。

更新

似乎新版本的ngDialog添加了此功能:

ngDialog.open({
    controller: function Ctrl(dep) {/*...*/},
    resolve: {
        dep: function depFactory() {
            return 'dep value';
        }
    }
});

1 个答案:

答案 0 :(得分:13)

看起来ngDialog并不支持在控制器中进行解析和自定义注入。但是,您可以通过自己创建controller实例来手动执行此操作:

ngDialog.open({
    scope: $scope,
    template: 'template.html',
    controller: $controller('someCtrl', {
        $scope: $scope,
        name: 'Thomas'
    })
});

然后在控制器中,您将能够访问注入的服务/变量:

app.controller('someCtrl', function($scope, name) {
    console.log(name); // Thomas
});

然而,这种方法有一个警告,因为当控制器由ngDialog本身实例化时,它还会在其中注入$element服务,这是打开的对话框HTML的angular.element实例(但我怀疑它在控制器中甚至是必要的)。但无论如何你应该知道。

演示:http://plnkr.co/edit/3YpQ2bemk8fntKAPWY9i?p=preview