如何指定控制器應該是JavaScript中的另一個控制器而不是HTML中的子控件?在AngularJS中包裝控制器
例如,在pageCtrl
,我爲我使用的呼籲的方法modalBlog
,在一個模式中打開一個博客帖子(角UI)。我想指定控制器爲BlogCtrl
,同實際的博客頁面。我想通過它的輸入,雖然(即博客文章ID)。有沒有辦法做這樣的事情:
$scope.modalBlog = function(postId) {
var modalInstance = $modal.open({
templateUrl: '...',
controller: function(..) {
// Set some variables
// ...
// set BlogController as a child controller to this
}
};
眼下,通過設置controller: 'BlogCtrl'
,它的母公司是路線範圍(從UI。路由器的$state
),或在視覺上:
所以,層次是:
+-Root
|---- PageCtrl
|---- BlogCtrl
但是當我指定一個匿名函數,我得到:
+-Root
|--+- PageCtrl
+--+- <Anonymous function>
有沒有一種方法(只用JavaScript)來實現這個層次?
+-Root
|--+- PageCtrl
+--+- <Anonymous function>
+--+- BlogCtrl
動機是重新使用BlogCtrl
中的代碼來下載帖子。
我想完全替代方法來實現日結束相同的功能/目標將是:
- 創建
BlogService
這兩者該匿名函數和BlogCtrl
可以使用, - 如果有符合規範的方式,甚至加載具有指定
BlogCtrl
作爲控制器
雖然我認爲這將是在這種特殊情況下更好的方法,我很好奇,一個標籤視圖通過JavaScript IFY在AngularJS範圍的層次結構(而不是在這是相當直截了當的HTML設置它。)
更新:
我覺得我給了第二個選項是最好的(我有隻有在寫這個問題的時候纔想到它)來實現我所需要的功能。
所以,我的作用是:
$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
父。
這導致視圖有些重複,因爲我不知道如何有條件地設置控制器(例如ng-controller="modal?BlogCtrl:not BlogCtrl"
),但它不是太糟糕。雖然我仍然很好奇如何在純粹的Javascript中設置結構。
對不起,但我不明白你想問什麼問題或你有什麼問題。 – JeffryHouser
即使我不明白。我希望你已經知道,如果你正在使用'角度模態',那麼相同的控制器不能用於進一步的數據操作。你必須使用新的控制器。 仍然可以幫助你,如果你澄清更多的東西... – micronyks
檢查這種方法結合你的項目模態:http://stackoverflow.com/questions/16265844/invoking-modal-window-in-angularjs-bootstrap-ui-使用-javascript/23958996#23958996 –