3

Это мои текущие настройки, при каждом столбце представлены контроллером:Одностраничное приложение, permalinks и ngView?

<navbar></navbar> 
[column1] [column2] [column3] 
<footer></footer> 

Кроме того, каждый столбец имеют битую информацию (одна или более переменные и объекты), которые при модификации, должны быть распространены через к его соседом.

В настоящее время я разделяю эти переменные с помощью фабрики и впрыскиваю ее в соответствующие контроллеры (контроллеры).

Теперь я хочу PermaLink значения переменных, например .:

http://localhost/column1/vars?var1=2&var2='hi' 
       /column2/ls1=%7B%27c%27%3A+1%2C+%27f%27%3A+%27b%27%7D 
       /column3/... 

Это также должно позволить мне удалить мои заводы.

Каков наилучший способ для достижения этой настройки, например: ngView? Ответ?

+0

Означает ли эта информация постоянная ссылка или может ли она жить в контроллере это родительский элемент для вкладок? –

+0

Желательно, чтобы постоянная ссылка, поскольку настраиваемая информация (и поисковые запросы) должна быть заклассифицирована. Есть проблемы с длиной URL-адресов, которые могут возникнуть в результате использования cookie или LocalStorage; но желательно, чтобы длина URL была достаточно длинной для моих целей. – stackoverflowuser95

+0

Эти параметры известны заранее или вы создаете их на лету? Я прошу, потому что есть некоторые ограничения для необязательных параметров (материал после?) В угловом маршрутизаторе. –

ответ

0

Для этого вы можете использовать ui-router (https://github.com/angular-ui/ui-router) с угловыми ui для отслеживания того, что эффективно представляет собой набор необязательных параметров. Для того, чтобы сделать этот код будет выглядеть примерно так:

<!DOCTYPE html> 
<html ng-app="plunker"> 

    <head> 
    <meta charset="utf-8" /> 
    <title>AngularJS Plunker</title> 
    <script>document.write('<base href="' + document.location + '" />');</script> 
    <link rel="stylesheet" href="style.css" /> 
    <script data-require="[email protected]" src="http://code.angularjs.org/1.0.7/angular.min.js" data-semver="1.0.7"></script> 
    <script src="angular-ui-states.min.js"></script> 
    <script src="app.js"></script> 
    </head> 

    <body ng-controller="MainCtrl"> 
    <ul> 
     <li><a href="" ng-click="transition('foo', {var1: 'hello', var2: 'world'})">Go to Foo</a></li> 
     <li><a ng-href="#/bar?var1={{bazVars.var1}}&var2={{bazVars.var2}}">Go to Bar</a></li> 
     <li><a href="" ng-click="transitionLocation('baz', {var1: 'sionara', var2: 'world', var3: 'meh'})">Go to Baz</a></li> 
     <li><a href="#/bah">Go to Bah</a></li> 
    </ul> 
    <div ui-view></div> 
    <pre> 
     {{$stateParams}} 
    </pre> 
    </body> 

</html> 

с установкой stateprovider принять эти необязательные параметры:

var app = angular.module('plunker', ['ui.state']) 
    .config(['$stateProvider', function ($stateProvider) { 
     $stateProvider 
      .state('foo', 
      { 
      url: '/foo?var1&var2', 
      template: '<h1>Foo</h1>', 
      controller: 'subCtrl' 
      }) 
      .state('bar', 
      { 
      url: '/bar?var1&var2', 
      template: '<h1>Bar</h1>', 
      controller: 'subCtrl' 
      }) 
      .state('baz', 
      { 
      url: '/baz?var1&var2&var3', 
      template: '<h1>Baz</h1>', 
      controller: 'subCtrl' 
      }) 
      .state('bah', 
      { 
      url: '/bah?var1&var2&var3', 
      template: '<h1>Bah</h1>', 
      controller: 'subCtrl' 
      }); 
    }]) 
    .run(['$stateParams', '$rootScope', function($stateParams, $rootScope){ 
     $rootScope.$stateParams = $stateParams 
    }]); 

app.controller('MainCtrl', function($scope, $state, $location) { 
    $scope.bazVars = { 
    var1: 'goodbye', 
    var2: 'world' 
    } 
    $scope.transition = function(name, options){ 
    $state.transitionTo(name, options); 
    } 
    $scope.transitionLocation = function(name, options){ 
    $location.path('/' + name); 
    for(key in options){ 
     $location.search(key, options[key]); 
    } 
    console.log($location.url()); 
    } 
}); 

app.controller('subCtrl', function($scope, $stateParams){ 
    console.log($stateParams); 
}) 

Работа plunker указанного выше: http://plnkr.co/edit/ZVLApU92MVdIhlovailY?p=preview

Обратите внимание, что пользовательский интерфейс-маршрутизатор позволяет вложенным состояниям также использовать точечную нотацию, чтобы вы могли отслеживать вспомогательные параметры вашей страницы с помощью этого же механизма (см. https://github.com/angular-ui/ui-router/wiki/Nested-States-%26-Nested-Views).

+0

Спасибо, но ваш пример не работает. Например: нажатие «bar» показывает URL-адреса в URL-адресе, но не имеет значения: http://run.plnkr.co/FQNyT91vsGlCqdk8/#/bar?var1=goodbye&var2=world – stackoverflowuser95

+0

Фактически он работал, однако ссылка на # в href foo и baz затем заменяли URL сразу после перехода. Извините, что исправлено в примере и плункер. –

0

Не уверен, что я понимаю требование здесь все, что хорошо ...

одно разделение параметров и обмена ими между контроллерами ... Но я не уверен, я понимаю ваши URL-адреса полностью ...

Что мне больше всего любопытно, так это наличие «столбца1, столбца2 и столбца3» в URL-адресе? что потребность в тех, кто ...

Вот немного plunker, чтобы увидеть, если я только что близко, чтобы понять часть идеи: - http://plnkr.co/edit/ZkaANVq5tCdLKWqHFa16?p=preview

(Использование https://github.com/dotJEM/angular-routing)

It на самом деле просто распространяет все переменные в ссылку для одного и того же «состояния» ...

Примечание: Я выбираю более продвинутое решение маршрутизации, чем модуль Angulars ngRoute, но на самом деле для этого прецедента я не думаю, что вы нужно что-то более продвинутое, чем базовый маршрутизатор ... но он делает из. имеют то преимущество, что вам не придется менять на более позднем этапе, если вы вдруг обнаружите, что вам нужны вложенные представления, способность фильтровать параметры и т. д.

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