2015-12-10 29 views
0

我試圖創建一個將保持狀態的模態。Angularjs - 在調用子狀態時再次阻止非抽象父狀態加載

每當調用子狀態時,都會再次加載父狀態(第二次)。是否有可能在調用子狀態時阻止加載父狀態?

這是代碼。如果需要更多信息,請發表評論。

.state('parent', { 
    url: "/name/:id/:param1", 
    templateUrl: "app/partials/parent.html", 
    params: { 
     param1: { 
      value: null, 
      squash: true 
     } 
    } 
}) 
.state('parent.child', { 
    url: "/:child", 
    template: "<div class='some_name'></div>", 
    onEnter: function (ngDialog, $state, $stateParams) { 
     ngDialog.open({ 
      templateUrl: '/app/partials/dialog.html' 
     }).closePromise.then(function() { 
      $state.go('name', $stateParams); 
     }); 
    } 
}); 

parent.html

<a class="some_class" 
    ui-sref="parent.child({id: id, param1: param1?param1:null,child: 'child'})"> 
    Open Child 
</a> 

我想表現出一個子狀態的模式,並且當模式被關閉,應用程序返回到父狀態。

+0

你由家長狀態的意思被再次裝入?你試圖阻止什麼? – Merott

+0

所有在我的父控制器中調用的API調用都被再次調用,這絕對是浪費。 –

回答

1

您可以將您的父控制器的邏輯移入某種activate函數,如果您還沒有,請在您撥打activate()之前進行檢查。

下面是一個簡單的例子:

.state('parent', { 
    url: "/parent", 
    template: "<div class='parent'></div>", 
    controller: ParentController, 
    }) 
    .state('parent.child', { 
    url: "/child", 
    template: "<div class='child'></div>", 
    controller: ChildController 
    }); 

function ParentController($state) { 
    if ($state.is('parent')) { 
    activate(); 
    } 
} 

ParentController.prototype.activate = function() { 
    // load up resources, etc 
} 

function ChildController() { 

} 
+0

感謝您的回答。問題在於使用壓扁並將參數設置爲空。當param1觸發子狀態爲空時,angular將'/ name/1234/{null}/child'呈現爲'/ name/1234/child'(因爲我們使用的是squash: TRUE')。這條路線與'param1 = child'的父母完全相似。 –