2014-01-22 22 views
0

看起來像Angular在路由更改時重新呈現整個視圖。看到這個例子: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', []); 

JS:用戶輸入

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展開 - 摺疊插件。如果用戶展開一定數量的元素,離開視圖並返回,則狀態將重置爲一切已摺疊。

是否有可能讓Angular簡單地顯示/隱藏視圖,而不是在路由改變時擦除重新渲染?

+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

僅適用於您正在使用角度綁定輸入框。怎麼樣做一個插件到dom的東西?你也必須跟蹤模型中的所有這些動作。 – Fergal

+0

你是對的,它不適用於操縱DOM。在這種情況下,我認爲角度路線不會起作用。如果您不介意使用插件,ui-router將解決您的問題。 –