Here's a plnkr 각도 + ui 부트 스트랩을 사용하여 자체 템플릿과 컨트롤러로 대화 상자를 시작하는 방법을 보여줍니다.
컨트롤러와 DOM 사이의 관계에 대해 약간 혼란스러운 것처럼 들립니다. 컨트롤러는 DOM 내부에 존재하지 않습니다. 사실 우리는 두 가지를 구별하려고 노력하고 있습니다. 오히려, DOM은 ... (당신이 짐작 했겠지만 ...) 컨트롤러에 의해 제어되는 $ 범위와 관련이 있습니다.
예를 들어, 대화 상자 요소가 DOM에 추가 될 때 컨트롤러가로드되지만 컨트롤러가 의미있는 방식으로 "대화 상자에서 열리지"않습니다. 다이얼로그는 주 앱이 사용하고있는 컨트롤러와 똑같이 쉽게 사용할 수 있습니다. "DialogCtl"
을 데모 라인 17의 "DemoCtl"
으로 바꿉니다. 제가 말하고자하는 것은 컨트롤러와 대화 상자가 독립적이라는 것입니다. 대화 상자는 컨트롤러를 실행하지 않고 오히려 $scope
을 사용합니다.
업데이트 : 예제를 약간 버그가 있음을 알았습니다. 대화 상자를 닫은 다음 다시 여는 경우 모달이 표시되지만 대화 상자는 표시되지 않습니다. 나는 그걸 알아 내려고하고 있는데, 무슨 일이 일어나고 있는지 잘 모르겠다. ...
업데이트 2 : 대화 상자를 다시로드 할 수 없다는 것은 템플릿 캐싱과 관련이 있다고 생각합니다. this plnkr에서는 쿼리 문자열에 '캐시 버스터 (cache buster)'를 추가하고 대화 상자가 다시로드되지만 모달 배경은 그렇지 않습니다. example on the ui-bootstrap 페이지는 문제없이 다시로드 된 &으로로드 할 수 있지만 템플릿 URL이 아닌 하드 코딩 된 템플릿을 사용하고 있습니다. 나는 plnkr에서 그 일을 할 수 없었다. 아, 출혈 가장자리에 작업의 즐거움 : -/
UPDATE 3 : 무슨 일인지 알아,하지만 $dialog
지침이 아니라고 도움 Opening the same dialog multiple times with $dialog
감사합니다. 지금 데모를 이해하려고 노력 중입니다. :) BTW, 왜 index.html 안에 ng-include = "index.html"이 있습니까? 어쩌면 내가 오해했습니다. 저는 컨트롤러가 템플릿과 분리되어야한다는 것을 알고 있습니다. "대화 상자에서 열림 제어"란 의미는 대화 상자 내용이 별도의 (부분) 템플릿 일뿐만 아니라 별도의 범위가 있고 존재하고 있다는 것입니다. 별도의 컨트롤러 컨텍스트 (예 : EditCtrl)에서 실행되므로 EditCtrl에 속해야하는 "저장"메서드로 ListCtrl 논리를 오염시킬 필요가 없습니다. 이는 ng-include 지시문을 사용하는 경우에해야합니다. 가짜 코드 인 – migajek
을 삭제했습니다. 그것은 불필요하고 틀렸고, 나는 아직도 대화가 왜 다시 시작하지 않을지 확신하지 못한다. ... – Jason
@Jason IE에서 작동하도록 만드는 확실한 방법이없는 것 같다. '대화 상자 시작'을 클릭하면 대화 상자가 두 번 표시되지만 다음 오류가 발생합니다. * 오류 : 10 $ digest() 반복에 도달했습니다. Aborting! * 브라우저의 임시 데이터를 지우고 IE를 다시 실행하면 다시 작동합니다 (2 회 클릭). 'UPDATE 3'을 확인했습니다. 문제는 없습니다. – Ravish