使用angularjs在导航时保持模型

时间:2014-12-24 18:27:32

标签: asp.net-mvc angularjs asp.net-web-api

我刚开始学习angularjs,我有一个问题:

我正在尝试使用带有更新按钮的实体表创建视图。按下Upadte按钮后,我想导航到另一个视图来编辑实体。

在我的主页面中,我用它将我的不同视图加载到:

<div ng-view></div>

我使用ASP.NET MVC为entites列表和更新表单创建部分视图。

这两个局部视图使用相同的角度控制器。

显示列表:

<div ng-controller="CompaniesController">
    <table id="tblCompaniesCollection">
        <thead>
            <tr>
                <th>Name</th>
 ...
            </tr>
        </thead>
        <tbody ng-repeat="Company in Companies">
            <tr>
                <td><span>{{Company.Name}}</span></td>
 ...
                <td>
                    <button type="button" ng-click="ChangeView(Company)">Go to edit</button>
                </td>
            </tr>
        </tbody>
    </table>
</div>

更新:

<div ng-controller="CompaniesController">
    <table id="tblCompanyToEdit">
        <tbody >
            <tr >
                <td>Name</td>
                <td><span>{{CompanyToEdit.Name}}</span></td>
                </tr>
    ...
        </tbody>
    </table>
</div>

在ChangeView(公司)功能中,我执行以下操作:

$scope.ChangeView = function (Company) {

    $scope.CompanyToEdit = Company
    $location.path('/EditCompany');
};

我试图实现的目标:

  • 有一个简单的部分视图来查看entites列表和 更新视图。

  • 在将entites列表的视图加载到它的位置之后,它为 通过WEB API从同一Web应用程序获取数据 控制器。

到目前为止一直在努力。

什么不起作用:

  • 当我单击按钮时,将所选实体存储在 $scope.CompanyToEdit并将其加载到视图中。

  • 这样我就不必再向服务器创建另一个请求了 让公司编辑,但角度控制器重新创建 导航,我丢失了数据。

你如何解决这个角度?如果我的方法不好,请告诉我。

1 个答案:

答案 0 :(得分:0)

使用相同的控制器无法实现这一目标。

原因是在更改视图时,我假设您正在更改状态,控制器将再次加载并正在进行初始化过程。

意味着$scope.CompanyToEdit没有值并且将是未定义的,除非您在控制器中初始化它。

您需要做什么,是使用服务来保存数据并使用控制器来访问该服务。该服务将保留价值,因为当您在同一SPA中导航时,服务以单身人士的形式存在。

将服务注入控制器并访问那里的数据。