2015-07-06 5 views
0

Я использую UI-маршрутизатор и мой макет делятся на 2 Ui-представление, боковое-бар и основной контентAngularJS Несколько представлений с общим логическим шаблоном проектирования

сторона-бар предлагает варианты, которые изменяют основное содержание (изменяя значения, устанавливая фильтры), и это проблема, поскольку, насколько я понимаю, они никогда не могут использовать один и тот же контроллер (например)

В этом пункте есть два решения, которые я рассматриваю, 1. Работа с одним видом перемещая боковую панель в основной вид, таким образом, они будут находиться внутри одного экземпляра контроллера. Это немного уродливое, но все же решение 2. связь между контроллерами с помощью messagi нг, ссылаясь на то, что нужно в этом вопросе отключенного

мне не нравится ни один из этих решений, я буду рад получить ваши предложения дизайна

текущего пример четкости маршрутизации (ум того же макет является общим для мое приложение и использовать повторно:

$stateProvider.state('home', { 
       url: "/home", 
       views: { 
        main: {    
         templateUrl:"homeTemplate.html", 
         controller: "HomeController" 
        }, 
        sidebar: {templateUrl: "homeSidebarTemplate.html"} 
       } 
      }) 
+0

Ну, после борьбы с этим и почти реорганизацией макета я нашел библиотеку, которая делает именно то, что мне нужно, создавая разреженный раздел вне области управления, оставляя его подключенным к той же области действия этого единственного контроллера (в моем случае): http://paulstovell.com/blog/angular-layouts-and-sections – OfirYaron

ответ

1

Посмотрите на angular services

Вы можете использовать их для этих целей. Служба - это одноэлементный, в котором вы можете обмениваться данными между любыми модулями. Поместите свои данные в сервис и используйте его в качестве модели в вашем основном представлении и боковой панели.

Например:

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 (пока вы не обновите свой браузер).

+0

Я знаю службы, подумал об использовании сервиса, который оба контроллера вводят для совместного использования данных, но в качестве дизайна он будет придерживаться проблема в том, что это потребует дублирования и децентрализованной логики. – OfirYaron

+0

Что вы имеете в виду именно с дублированием и децентрализацией? Назовите свои услуги соответствующим образом, и у вас есть обратное. Многоразовая логика централизована. –

+0

Я имею в виду, что для каждого маршрута (и у меня будет десятки) у меня будет два контроллера (один для боковой панели и один для основного) и еще одна служба для совместного использования модели. (В стороне от службы, которую у меня уже есть для действий REST) теперь оба контроллера будут иметь дубликаты для работы над штатом Мне нравится решение, но боюсь, что это потребует от меня добавления логики пользовательского интерфейса или вспомогательного метода для проживания внутри службы, чтобы они записывались один раз, а служба зная, что звук пользовательского интерфейса не подходит – OfirYaron