2014-12-09 2 views
0

У меня есть мой основной вид, со ссылкой на другой вид, загрузка. У меня есть две кнопки на моем домашнем экране: «Бесплатная пробная версия» и «загрузка», обе из которых указывают на просмотр загрузки, но я хочу, чтобы первый абзац описания загрузки определялся параметром, отличающим две кнопки.Содержимое страницы AngularJS на основе параметров маршрутизации (тот же вид)

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

ответ

0

Предполагая, что я правильно понял ...

Это теоретически возможно иметь обе страницы управляемых одним контроллером, но это не лучшая практика, если они 2 отдельные виды, и в любом случае, контроллеры считаются недолговечными. «Угловой способ» передачи данных между контроллерами - это услуги. Таким образом, вы могли бы сделать что-то вроде этого:


app.factory('DownloadType',function() { 
    return { 
     type:"free" 
    }; 
    // just used "free" as a default 
}) 
.controller('Home',function($scope,DownloadType) { 
    $scope.setType = function(type) { 
     DownloadType.type = type; 
    }; 
}) 
.controller('Download',function($scope,DownloadType) { 
    $scope.type = DownloadType.type; 
}) 
; 

И тогда ваш дома шаблона может выглядеть следующим образом:

<button ng-click="setType('free')">Free</button> 
<button ng-click="setType('paid')">Paid</button> 

И ваш шаблон скачать

<div ng-show="type === 'free'">This is a free download</div> 
<div ng-show="type === 'paid'">You are paying us! We love you!</div> 

Есть несколько чистых способы, например, если вы хотите один щелчок, чтобы перейти на страницу и установить его:


.controller('Home',function($scope,$location,DownloadType) { 
    $scope.setType = function(type) { 
     DownloadType.type = type; 
     $location.path('/download'); 
    }; 
}) 

Наконец, если вы хотите их на одном экране, то вам не нужна услуга вообще, потому что у вас есть один вид с одним контроллером.

+0

Что если я хочу сделать это с помощью одного контроллера? Я довольно новичок в AngularJS. Как я могу передать значение DownloadType между представлениями с одним и тем же контроллером? Каждый раз, когда я перехожу к просмотру загрузки, главный контроллер сбрасывает ... – Tsury

+0

Вы могли бы, но почему бы вам? Поймите, что это означает, что * все * в сфере охвата будет разделяться между взглядами, и все может случиться. Однако, если вы хотите, и согласитесь, что это единственный вид, то вы можете. – deitch

0

Ваше требование может быть выполнено с помощью вложенных представлений с помощью ui-router. Пример кода,

$stateProvider 
.state('home', { 
    url: "/", 
    templateUrl: "templates/home.html" 
}) 
    .state('product', { 
     url: "/product", 
    templateUrl: "templates/product.html" 
    }) 
.state('product.trial', { 
    url: "/product/trial", 
    templateUrl: "templates/product.trial.html" 
}) 
.state('product.download', { 
    url: "/product/download", 
    templateUrl: "templates/product.download.html" 
}) 

Теперь внутри product.trial.html & product.download.html, поместите первый абзац только & в product.html, поместите этот код ::::

//the code snippet that is common for all views.... 
<div ui-view> 
Смежные вопросы