我的项目中有两个屏幕,MemberList.HTML 和 EditMember.html。MemberList.HTML 显示所有成员以及每个成员的“编辑”链接。当我点击 Edit 链接时,它调用函数 ng-click="EditMember(member)" 并且 EditMember(member) 的代码是
$scope.EditMember = function (member) {
var getData1 = angularService.GetMember(member.ID);
getData1.then(function (mem) {
$scope.Member = mem.data;
alert($scope.Member.FirstName);
$location.path('/members/editmember');
}, function (error)
{
alert('Error in getting Member record');
}
);
};
Run Code Online (Sandbox Code Playgroud)
EditMember.Html 的代码
<div>
<div class="bottom-margin">
<div class="left-label">ID</div>
<div><input type="text" name="txtID" id="txtID" ng-model="Member.ID"/></div>
</div>
<div class="bottom-margin">
<div class="left-label">First Name</div>
<div><input type="text" name="txtFirstName" ng-model="Member.FirstName"/></div>
</div>
</div>
<div>
<div class="bottom-margin">
<div class="left-label"><input type="button" name="btnCancel" value="Cancel" /></div>
<div><input type="button" name="btnSave" value="Save" /></div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
路由配置是
$routeProvider.when('/members/editmember',
{
templateUrl: '/Template/EditMember.html',
controller: 'myCntrl'
});
Run Code Online (Sandbox Code Playgroud)
现在的问题是,在警报中,它向我显示了名字,但它没有在 EditMember.Html 中显示任何数据。
一切都在同一个角度控制器中,这里没有使用不同的控制器。
如何将带有成员数据的 $scope 传递给 EditMember.Html?我究竟做错了什么?
与服务不同,控制器不是 angular 的单例。当您更改位置时,会创建该控制器的一个新实例,因此会创建一个新的作用域。
就个人而言,我会将 URL 中的引用传递给您要编辑的成员,例如/members/edit/1234,并在控制器加载时加载该数据,或在使用$routerProvider resolve路由期间加载该数据。
就个人而言,我还会考虑使用不同的控制器进行编辑和查看,并将任何共享功能移至服务中 - 只是为了保持一致。