【发布时间】:2013-07-13 12:57:59
【问题描述】:
朋友..
为了了解路由在 Angular 中的工作原理,我创建了一个简单的应用程序。此应用程序只有两个页面: 1.第一页将显示员工表的所有行。单击特定行后,第二页将显示包含该员工详细信息的表单。
第一页显示的列表使用如下代码:
<table>
<tr ng-repeat="employee in employees">
<td>{{employee.firstname}} - {{employee. address}}</td>
<td><span ng-click="getSingleEmployeeDetails(employee.id)">Edit</a></td>
</tr>
</table>
我对这两个页面使用相同的控制器,这个控制器如下所示:
function EmployeeCtrl($scope,$http,Employee,$location,$routeParams) {
// Get all employee details
var data;
Employee.query().then(function(_data) {
$scope.employees = _data.data;
});
// Get Single Employee Details
$scope.getSingleEmployeeDetails = function(id) {
$scope.employee = scope.employees[id];
$location.path('/editemployee/' + id);
}
}
但是我面临的问题是,当代码被路由到 /editemployee/1
由于某种原因,$scope.employees 失去了它的价值。
换句话说,表单永远不会填充员工详细信息。
我在这里做错了什么?
【问题讨论】:
-
如果两个视图的控制器类型相同,并不意味着它们是同一个实例。所以问题是每次角度更改路由时,它都会创建一个新的控制器实例,该实例没有前一个实例所具有的任何信息。所以你需要使用一个服务来拥有一个可以存储数据的单例。
-
实际上,如果您查看 John Lindquist 的这个示例,他似乎在更改路由时将一个控制器的 $scope 用于另一个控制器。他怎么能做到这一点? youtube.com/…
-
如果两个作用域同时处于活动状态,则会发生作用域继承。尽管在 egghead.io 上完全推荐 John 的视频,但这是我第一次接触 Angular,我仍然会回头。
-
理解范围继承的细节真的只需要很好地理解原型继承(特别是如果你来自 Class(y) 继承模型)。简而言之,如果你从你的祖先那里继承了一个属性,那么当有东西试图读取你身上的那个属性时,它将从你的祖先那里读取,但是如果直接在你的实例上分配,它将不再依赖祖先来获取值。这意味着事情可能会以奇怪的方式“打破”(第一次工作)。
标签: angularjs