私のコンテンツに2つのレイアウト(つまり、horizontal
とvertical
)を提案したいと思います。セレクタを切り替えると自動的に対応するレイアウトになります。ここJSBinされています。ただし、上記のコードで、私たちはビューを変更するたびに、$scope.one
と$scope.two
が初期値にリセットされ
<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>
。レイアウトの変更に関係なく、テキストエリアの変更が残ることを願っています。
誰もこれを解決する方法を知っていますか?
しかし、このビジネスロジックで、共有/親コントローラを1つ使用するか、工場で通信する2つのコントローラを使用するのが問題ですか? – SoftTimur
アプリケーションの仕様によって異なります。私は2つのコントローラを使用し、冗長性を避けるためにすべての共有機能を工場に入れます。このようにして、複数のコントローラで使用されているロジックは素晴らしい工場で処理され、コントローラはまだ原子配列です。 – lin
レイアウトの切り替えをテンプレートの変更のみにしたいので、私は共有コントローラを1つ優先したいと思います。コントローラの後ろに他のものを変更したくないのですが... – SoftTimur