2015-03-30 2 views
0

У меня есть небольшой веб-сайт, который я хочу сделать с помощью Angular. Сайт состоит из 3 типов содержимого: - список, который на самом деле является индексом, '/' - уникальное письменное содержимое, которое является '/ r' - вид сува для элементов из списка I имеют все три типа представлений, но с маршрутизацией я в проблеме. У меня уже есть контроллер, который обрабатывает рабочий объект и создает из него список (массивы пар ключ-значение в массиве, заголовке, субтитре, миниатюрном изображении и т. Д. Для каждого рабочего элемента), но когда я нажимаю на один из элементы списка, должна отображаться его подстраница. Я хочу использовать его с атрибутом $ index по умолчанию, которого для меня достаточно. Но могу ли я использовать контроллер, который я сделал для распечатки, или я должен сделать еще один? за помощь, это мой app.js:Угловая маршрутизация с дополнительными услугами

(function(){ 
    var app = angular.module("portApp", ["ngRoute"]); 
    app.config(function($routeProvider) { 
     .when("/", { // default, basically the list-view 
      controller: "", 
      templateUrl: "/listView.html" 
     }); 
     .when("/r", { // about section-s content 
      controller: "", 
      templateUrl: "/resumeView.html" 
     }); 
     .when("/w/:wId", { // sub pages from the list view - $index 
      controller: "???", 
      templateUrl: "/itemView.html" 
     }); 
     .otherwise({ // otherwise redirect to the listView 
      redirectTo: "/" 
     }); 
    }); 
    app.controller("PortController", function(){ // controller for the listView 
     this.products = work; 
    }); 
    var work = [ 
     { 
      Title: "Carlsberg/Dreher", 
      subTitle: "Sörösdoboz tervek ", 
      Link: "sorok", 
      Thumbnail: "img/portfolio08.png", 
      Image: "img/sorokmont.png" 
     }, 
     { 
      Title: "Pepsi", 
      subTitle: "Kristályvíz Promóció", 
      Link: "pepsi", 
      Thumbnail: "img/portfolio13.png", 
      Image: "img/pepsimont.png" 
     }  
    ] 
})(); 

Как я должен закончить это?

ИЛИ должен ли я как-то использовать атрибут Link элемента из спискаView и передать его элементу itemView с контроллером?

+0

вы можете использовать $ location.path в контроллере. – user3722785

+0

Я бы сохранил «работу» в заводской службе и вызвал это из контроллера вместо того, чтобы сделать его глобальной переменной. Затем перед изменением маршрута вы должны вызвать метод setProduct() из заводской службы. Создайте новый контроллер для страницы продукта, который проверяет заводскую службу для установленного продукта и загружает его в область. Или используйте $ routeParams и загрузите весь массив «work» и используйте $ routeParams.wId для доступа к индексу нужного продукта. – Rorschach120

+0

Спасибо, @ Rorschach120, но я новичок в Angular, так что просто пытаюсь заставить все работать прямо сейчас: $ Так что я немного изменил свой код, теперь у меня есть locationProvider в моем js-файле, и я составил 2 контроллера: 1 для определения моего рабочего массива, который я повторяю (это для представления списка), и 1 нового для обработки деталей. Я изменил work.Link value -removed .html из него, и хочу передать его другому контроллеру и получить только соответствующие данные. Но как мне это сделать с обслуживанием? – CreativeZoller

ответ

0

Чтобы сделать завод с массивом «работы» вы могли бы сделать что-то вроде этого:

app.factory('workFactory', function() { 
    var scope = this; 

    scope.work = [ 
     { 
      Title: "Carlsberg/Dreher", 
      subTitle: "Sörösdoboz tervek ", 
      Link: "sorok", 
      Thumbnail: "img/portfolio08.png", 
      Image: "img/sorokmont.png" 
     }, 
     { 
      Title: "Pepsi", 
      subTitle: "Kristályvíz Promóció", 
      Link: "pepsi", 
      Thumbnail: "img/portfolio13.png", 
      Image: "img/pepsimont.png" 
     }  
    ]; 

    return scope; 
} 

И тогда в вашем контроллере вы бы вводить его и называют его

app.controller('myController', function($scope, workFactory, $routeParams) { 
    $scope.work = workFactory.work; 
    $scope.product = scope.work[$routeParams.wId]; 
}); 

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

+0

Ahh спасибо. Только один вопрос, который сейчас непонятен мне. Пока у меня был только простой массив, который был вызван в контроллере с помощью этой строки.product = work. Но теперь, если я поместил сферу в фабрику, как я могу получить ее для другого контроллера? portApp.controller ('mainController', function ($ scope) { this.products = $ scope.work; }); – CreativeZoller

+0

Я просто использую слово scope на заводе. это может быть «var banana = this; return banana; 'просто используется для возврата содержимого фабрики. Просто введите завод в контроллер так же, как я сделал выше. – Rorschach120

Смежные вопросы