내 내용에 대해 두 가지 레이아웃 (예 : horizontal
및 vertical
)을 제안합니다. 따라서 셀렉터를 전환하면 해당 레이아웃으로 자동 전환됩니다. 여기 JSBin있다 : 그러나
<html ng-app="flapperNews">
<head>
<script src="https://code.jquery.com/jquery.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.3.2/angular-ui-router.js"></script>
<script type="text/ng-template" id="horizontal.tpl">
<textarea ng-model="one"></textarea>, <textarea ng-model="two"></textarea>
<br><br>{{one}}+{{two}}
</script>
<script type="text/ng-template" id="vertical.tpl">
<textarea ng-model="one"></textarea><br><textarea ng-model="two"></textarea>
<br><br>{{one}}+{{two}}
</script>
<script>
var app = angular.module('flapperNews', ['ui.router']);
app.config(['$stateProvider', function ($stateProvider) {
$stateProvider
.state('entry', {
url: '/',
params: { tpl: 'vertical' },
templateUrl: function (params) {
return params.tpl + ".tpl"
}
})
}]);
app.controller('MainCtrl', ['$scope', '$state', function ($scope, $state) {
$scope.one = "one";
$scope.two = "two";
$scope.layouts = ["horizontal", "vertical"];
$scope.$watch('layout', function() {
$state.go('entry', {tpl: $scope.layout});
})
}])
</script>
</head>
<body ng-controller="MainCtrl">
<select ng-model="layout" ng-init="layout = 'horizontal' || layouts[0].value" ng-options="x for x in layouts"></select>
<br><br>
<ui-view></ui-view>
</body>
</html>
, 상기 코드는 우리가 뷰를 변경할 때마다 함께 $scope.one
및 $scope.two
은 초기 값으로 리셋된다. 레이아웃 변경에 관계없이 텍스트 영역의 변경 사항이 유지되기를 바랍니다.
누구든지 해결 방법을 알고 있습니까?
하지만이 비즈니스 로직이 하나의 공유/상위 컨트롤러 또는 공장에서 통신하는 두 컨트롤러를 사용해야한다면 질문은 무엇입니까? – SoftTimur
응용 프로그램 사양에 따라 다릅니다. 저는 2 개의 컨트롤러를 사용하고 중복성을 피하기 위해 모든 공유 기능을 하나의 공장에 두었습니다. 그런 식으로 여러 컨트롤러에서 사용되는 논리가 멋진 팩토리에서 처리되고 컨트롤러가 여전히 원 자성입니다. – lin
하나의 공유 컨트롤러를 선호합니다. 왜냐하면 템플릿 사이의 전환 만 바꾸고 싶기 때문에 다른 것들 (예 : 컨트롤러)이 변경되기를 원하지 않습니다 ... – SoftTimur