2014-01-22 3 views
0

Похоже, что угловое переназначает весь вид при изменении маршрута. Смотрите пример: http://jsfiddle.net/RSHG8/1/AngularJS запомнить Состояние DOM между представлениями

HTML:

<div class="nav"> 
    <a href="#/one">One</a><a href="#/two">Two</a> 
</div> 
<div ng-app="app" id="ng-app"> 
    <div ng-view=ng-view></div> 
</div> 

var app = angular.module('app', []); 

ЯШ:

app.config(function ($routeProvider) { 
    $routeProvider.when('/one', { 
     template: 'Template {{template}}<br>Enter some text: <input type="text" /> then click "Two"', 
     controller: 'one' 
    }) 
     .when('/two', { 
     template: 'Template {{template}}<br>Click back to view "One" to see changes undone', 
     controller: 'two' 
    }) 
     .otherwise({ 
     redirectTo: '/one' 
    }); 
}); 

app.controller("one", function ($scope) { 
    $scope.template = "One"; 
}); 

app.controller("two", function ($scope) { 
    $scope.template = "Two"; 
}); 

Текст, введенный пользователем забывается, когда переключение между видами. Это будет проблемой и для негласных вещей. Например. плагин jQuery expand-collapse. Если пользователь расширяет определенное количество элементов, выходит из представления и возвращается, состояние будет сброшено, чтобы все рухнуло.

Возможно ли получить угловое представление простого/скрытого вида, а не стереть повторную визуализацию при изменении маршрута?

+0

уверен. но не с ng-view. вы можете использовать ng-show и показывать только часть вашей страницы, которая должна быть видимой. – michael

+0

Мне нужен контроллер верхнего уровня, который контролирует, какой вид отображать/скрывать, а затем контроллеры для каждого из видов? – Fergal

+0

да, это было бы ... – michael

ответ

0

Вы можете попробовать назначить ng-модель входному тегу и сохранить значение в родительском контроллере.

HTML

<div class="nav"> 
    <a href="#/one">One</a><a href="#/two">Two</a> 
</div> 
<div ng-app="app" id="ng-app"> 
    <div controller="AppCtrl"> 
     <div ng-view=ng-view></div> 
    </div> 
</div> 

var app = angular.module('app', []); 

JS

app.config(function ($routeProvider) { 
     $routeProvider.when('/one', { 
      template: 'Template {{template}}<br>Enter some text: <input type="text" ng-model="$parent.inputValue" /> then click "Two"', 
      controller: 'one' 
     }) 
      .when('/two', { 
      template: 'Template {{template}}<br>Click back to view "One" to see changes undone', 
      controller: 'two' 
     }) 
      .otherwise({ 
      redirectTo: '/one' 
     }); 
    }); 

    app.controller("AppCtrl", function AppCtrl($scope) { 
     $scope.inputValue = ""; 
    }); 

    app.controller("one", function ($scope) { 
     $scope.template = "One"; 
    }); 

    app.controller("two", function ($scope) { 
     $scope.template = "Two"; 
    }); 
+0

Работает только потому, что вы используете угловой для привязки поля ввода. Как насчет плагина, который делает материал для дома? Вам также придется отслеживать все эти действия в модели. – Fergal

+0

Вы правы, это не работает для манипулирования DOM. Я не думаю, что угловой маршрут будет работать в этом случае. Если вы не против использования плагина, ui-router решит вашу проблему. –

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