0

我有路由

app.config(function ($routeProvider) {
$routeProvider.
    when("/questions", {controller:"Questions", templateUrl: "questions.html"}).
    when("/objections", {controller: "Objections", templateUrl: "objections.html"}).
    when("/objections/:oId", {controller: "Objections", templateUrl: "objections.html"}).
    when("/persons", {controller: "Persons", templateUrl: "persons.html"}).
    when("/persons/:pId", {controller: "Persons", templateUrl: "persons.html"}).
    when("/questions/:qId", {controller: "Questions", templateUrl: "questions.html"}).
    otherwise({redirectTo : "/persons"});
})

和 /objections 和 /objections/:pId 的一个模板

<script type="text/ng-template" id="objections.html">
<div class="stroke">
<label>Поиск: <input class="border" type="text" ng-model="search.text"></label>
<ul class="objections-objections left_column">
    <li class="border" ng-repeat="objection in objections | filter:search">
        <a href="#/objections/{{objection.id}}">
            {{objection.text}}
        </a>
    </li>
</ul>
<div class="right_column">
    <p class="header"></p>
    <p class="text">
        <span>ID возражения: {{objection.id}}</span>
        <br>
        <textarea class="border" name="" id="" cols="30" rows="10" ng-model="objection.text"></textarea>
    </p>
    <ul class="questions-objections" ng-show="objection.questions.length">
        <span>Список вопросов</span>
        <li class="border" ng-repeat="question in objection.questions">
            <a href="#/questions/{{question.id}}">{{question.text}}</a>
        </li>
    </ul>
    <p class="footer">
        <button ng-click="add()">Добавить</button>
        <a href="" ng-click="delete(objection)">Удалить</a>
        <a href="" class="save" ng-click="save()">Сохранить</a>
        <a href="" class="close" ng-click="cancel()">Закрыть</a>
    </p>
</div>

因此,当我在搜索字段中输入文本并对列表项进行排序时,然后我单击其中一项并查看搜索字段

我应该如何要求我的代码在此路由之间不会重置 search.text 指令?

谢谢你

4

1 回答 1

1

当视图角度发生变化时,有多种方法可以持久化对象。

  • 您可以在 $rootScope 上定义您的搜索条件(可以注入任何控制器),例如 $rootScope.searchCriteria={term:null}; 然后在您的模板中绑定到此属性。你可以直接使用ng-model="searchCriteria.term"
  • 如果你有,你可以在 ng-view 的父控制器上定义属性。如
<div ng-controller="rootController">
   <ng-view/>
</div>
  • value您可以在模块配置期间创建服务或定义服务。由于这些本质上是单例的,因此无论您将在何处注入此服务,您都将获得搜索条件对象。

myapp.value("searchCriteria",{term:null});

appRoot.controller("Questions",
        ["$scope", "searchCriteria",
            function ($scope, searchCriteria ) {

在此处查看模块文档

于 2013-07-12T11:37:46.243 回答