2016-09-08 2 views
2

나는 이것에 대한 기사를 찾고있다. 그리고 내가 발견 한 것은 런타임에만 상태를 동적으로 추가하는 것이다. 내가 찾은 해결책에 가장 가까운 것은 deferIntercept, $urlRouter.sync()$urlRouter.listen()을 사용합니다. 그러나 $urlRouter은 런타임 (컨트롤러 사용자 작업 전에 실행 됨)에서만 사용할 수 있습니다.컨트롤러에 경로 추가하기

plunker은 런타임에 동적 동적 추가 상태 인 을 표시하지만 도전 과제는 대신 컨트롤러에 구현하는 것입니다.

아래의 내용은 내가 달성하고자하는 것을 보여줍니다. 나는이 문제에 대해 수 주일 동안 고심하고있다. 누군가가 내게 욕망 결과를 얻는 방법에 대한 힌트를 줄 수 있기를 바랍니다.

// Predefined state in config 
$stateProvider.state('default', { 
    url: '', 
    templateUrl: '', 
}) 

// Predefined state in config 
$stateProvider.state('home', { 
    url: '', 
    templateUrl: '', 
}) 

// Additional Added state in controller when user click button 
$scope.clickButton = function() { 
    $stateProvider.state('newpage', { 
     url: '', 
     templateUrl: '' 
    }) 
}; 
+0

당신이 완전이 된 index.html에서 NG 반복하여 인쇄 클릭 콜백 2 개 어레이와 컨트롤러를 추가 http://plnkr.co/edit/wDVf2S?p=preview

을 답변 (들) http://stackoverflow.com/q/24727042/1679310. 그들은 시동 시나리오 (서버로부터 오는 데이터로부터 상태를 구성)를 커버하고 런타임시 새로운 상태를 추가합니다. ... –

+0

이것이 도움이 될지 확인하십시오. http://stackoverflow.com/questions/25866387/angular-u-router-programmatically-add-states/31478967 – nmanikiran

+0

@ RadimKöhler 의견을 보내 주셔서 감사합니다. 질문과 답변도 읽었습니다. 하지만 런타임에 컨트롤러 사용자 작업 내에서 새 상태를 추가하고 싶습니다. – stackdisplay

답변

2

난 당신의 코드를 약간 업데이트 : 나는이

app.controller('mainCtrl', mainCtrl); 

mainCtrl.$inject = ['$urlRouter']; 
function mainCtrl ($urlRouter) { 
    var vm = this; 

    // 'add new state' button click function 
    vm.addState = function() { 
    var name = 'new-state-' + (vm.hrefs.length - 2); 
    var newState = { 
     "url": "/" + name, 
     "abstract": false, 
     "parent": "", 
     "views": {} 
    }; 
    // add views 
    newState.views[name] = { 
     "name": name, 
     "template": "<div style='padding:20px; border: solid 1px red; margin-bottom: 15px;'>TEMPLATE FOR <em>" + name.toUpperCase() + "</em> GOES HERE</div>" 
    }; 
    newState.views["[email protected]"] = { 
     "name": "[email protected]", 
     "templateUrl": "tpl.content.html" 
    }; 
    newState.views["[email protected]"] = { 
     "name": "[email protected]", 
     "templateUrl": "tpl.left.html" 
    }; 

    $stateProviderRef.state(name, newState); 

    vm.hrefs.push(name); 
    // add to the head 
    vm.views.reverse().push(name); 
    vm.views.reverse() 

    $urlRouter.sync(); 
    $urlRouter.listen(); 
    }; 

    vm.hrefs = ['home', 'other', 'about']; 
    vm.views = ['', 'header', 'left', 'container', 'footer']; 
} 
+0

OP에 도움이되는지 아닌지는 여전히 멋진 소식입니다. – TSmith

+0

새로운 상태 단추 추가와 함께 JSON 파일에서 상태를로드하기 위해 내 plunker, 추가 단추를 업데이트했습니다. 두 작업 모두 컨트롤러에서 실행됩니다. – Andriy

관련 문제