如何指定控制器应该是JavaScript中的另一个控制器的子节点而不是HTML?
例如,在pageCtrl
上,我有一个名为modalBlog
的方法,它以模态(Angular-UI)打开博客文章。我想将控制器指定为{{1}和我在实际博客页面上使用的一样。我想传递它输入(即博客文章ID。)有没有办法做类似的事情:
BlogCtrl
现在,通过设置$scope.modalBlog = function(postId) {
var modalInstance = $modal.open({
templateUrl: '...',
controller: function(..) {
// Set some variables
// ...
// set BlogController as a child controller to this
}
};
,它的父级是路由范围(来自ui.router的controller: 'BlogCtrl'
),或者是视觉上的:
因此,层次结构是:
$state
但是当我指定一个匿名函数时,我得到:
+-Root
|---- PageCtrl
|---- BlogCtrl
有没有办法(只用JavaScript)来实现这种层次结构?
+-Root
|--+- PageCtrl
+--+- <Anonymous function>
我的动机是重新使用+-Root
|--+- PageCtrl
+--+- <Anonymous function>
+--+- BlogCtrl
中的代码来下载帖子。
我认为实现相同的功能/最终目标的完全替代方法是:
BlogCtrl
这个匿名函数和BlogService
都可以使用,BlogCtrl
作为控制器虽然我认为在这种特殊情况下这些方法会更好,但我很好奇是否有办法通过JavaScript在AngularJS中指定范围的层次结构(而不是在HTML中设置相当直的前进。)
更新
我认为我给出的第二个选项是最好的(我在编写这个问题时只考虑过它)来实现我需要的功能。
所以,我的功能是:
BlogCtrl
};
而不是指向$scope.modalBlog = function(postId) {
var modalInstance = $modal.open({
templateUrl: '...',
controller: function(..) {
// Set some variables and functions
}
,我指向views/blog.html
,其顶部标记为:
views/blog-modal.html
这给了我设计的结构,其中上面的控制器函数是<section ng-controller="BlogCtrl">
的父元素。
这会导致视图有些重复,因为我不确定如何有条件地设置控制器(例如BlogCtrl
),但这并不算太糟糕。我仍然对如何在纯Javascript中设置结构感到好奇。
答案 0 :(得分:0)
根据我的理解,您要实现的是能够使用模态(子)状态调用父控制器中定义的匿名函数。
在不访问范围的情况下定义匿名函数。然后,不是将控制器传递给模态,而是传递匿名函数。
在父控制器中:
$scope.getpost= function (postId) {
...
};
模态:
$scope.modalBlog = function (postId) {
var modalWindow = $modal.open({
templateUrl: 'views/blog.html',
controller: 'editBlogController',
resolve: {
textid: function () { return postId; },
gettextfn: function () { return $scope.getpost; }
}
});
};
您应该能够根据模态控制器的需要传递尽可能多的可重用函数。
如果您也尝试重用视图,我不清楚这种重用的条件是什么。