Я использую ui-router, и мой макет разделен на 2 ui-views, side-bar и основной контент
боковая панель предлагает варианты, которые изменяют основную модель контента (изменяя значения, устанавливая фильтры) и что проблема, потому что, насколько я понимаю, они никогда не могут использовать один и тот же контроллер (экземпляр)
на данный момент есть два решения, которые я рассматриваю, 1. Работая с одним видом, перемещая боковую панель в основной вид, таким образом, они будут находиться внутри одного экземпляра контроллера. Это немного уродливое, но все же решение 2. Связь между контроллерами с обмен сообщениями, вызывая все необходимое в этой отключенной материи
Мне не нравится ни одно из этих решений, я буду рад получить ваши дизайнерские предложения
текущий пример определения маршрутизации (помните, что тот же макет является общим для моего приложения и используется повторно:
$stateProvider.state('home', {
url: "/home",
views: {
main: {
templateUrl:"homeTemplate.html",
controller: "HomeController"
},
sidebar: {templateUrl: "homeSidebarTemplate.html"}
}
})
Взгляните на угловые службы
Вы можете использовать их для этих целей. Служба - это одноэлементный, в котором вы можете обмениваться данными между любыми модулями. Поместите свои данные в сервис и используйте его в качестве модели в вашем основном представлении и боковой панели.
Например:
angular.module('myApp.someNamespace', [])
.factory('someService', function () {
var service = {};
service.myList = {1,2,3};
service.myMenu = {'apples', 'oranges', 'pears'}
service.addToList = function(number) {
service.myList.push(number);
}
return service;
});
вставляйте эту службу в свой контроллер и директиву боковой панели:
angular.module('myApp.myControllers', [])
.controller('myCtrl', function ($scope, someService) {
$scope.model = someService;
});
В вашем представлении привязывайтесь к вашим служебным переменным/методам:
<div ng-repeat="number in model.myList">
<input type="number" ng-model="number"/>
</div>
<input type="number" ng-model="newNumber"/>
<button ng-click="model.addToList(newNumber)">Add</button>
Еще одно преимущество использования этого шаблона заключается в том, что ваши взгляды будут оставаться там, где вы были, когда будете двигаться вперед и назад (более сдержанно), потому что он получает данные из вашего сервиса singleton. Также вам нужно будет только один раз получить данные из своего api (пока вы не обновите свой браузер).