以角度运行另一个控制器的控制器

时间:2014-07-10 12:18:30

标签: angularjs controller angular-ui-bootstrap

首先,我说在类似的问题上读过Vojta的回答:Can one controller call another? 但仍有一些事情要清楚。

我需要做的是编写一个控制器(?),它打开一个ui-bootstrap模态窗口(http://angular-ui.github.io/bootstrap/#/modal)。

可以从不同的页面打开此弹出窗口,因此我希望此代码位于单独的窗口中。问题是,这个控制器没有视图(可以触发它运行),也没有专用状态(我使用ui-router)。

所以我想写这样的东西

<div ng-click="angular.module('app').controller('popup').run();">

但当然,它不会发生。

我认为服务可以用于此目的,但我认为将服务用于处理用户交互的事情并不是一个好主意。我相信控制器就是为此设计的。

其他选项是使用指令(应该按设计处理视图),但如果我想从逻辑中激活此指令怎么办?

请说明如何妥善处理这类事情。谢谢!

1 个答案:

答案 0 :(得分:0)

我认为弹出窗口是一个指令。 如果你想以编程方式使用它,你可以在父元素中插入指令并激活它引用$ rootScope。

如果你真的需要在运行时在控制器中插入指令,你可以这样做。

//assume you have a <popup> directive
var popup = angular.element(document.createElement('popup'));
var el = $compile( popup )( $scope );
//where do you want to place the new element?
angular.element(document.body).append(popup);

这样你就可以从控制器访问popup.myMethod(或el.myMethod,我不确定)。