无法在不同的视图中显示 Angular 模型的副本
无法在不同的视图中显示 Angular 模型的副本
我有一个示例应用程序,我想在一个视图中显示我的模型,并在另一个视图中进行编辑。这是我的控制器:
var app = angular.module('plunker',['ngRoute']);
app.controller('MainCtrl',function($ scope,$ location){
var self = this;
this.name ='World';
this.someData = {name:'test' };
this.someCopyData = {};
this.theEdit = function(path){
self.someCopyData = angular.copy(self.someData);
$ location.path(path);
};
});
app.config(['$ routeProvider',function($ routeProvider){
$ routeProvider
.when('/',{
templateUrl:'foo.html',
controller:'MainCtrl as main'
})
.when('/ edit',{
templateUrl:'fooedit.html',
controller:'MainCtrl as main'
});
} ]);
code>
部分HTML非常简单:
数据:{{main.someData.name}}
code>
和:
code>
Plunker 在这里。
如何才能显示我的模型的副本?这显然是一个作用域问题,但我还没有找到一个合适的解释行为的方法。
问题出现的原因是:只有一个视图,尝试为同一个模型创建两个视图。作者想要在foo.html
中显示模型,并在fooedit.html
中编辑模型的副本。
解决方法:可以使用Angular的双向数据绑定功能来解决这个问题。通过在控制器中创建一个模型对象,并将其绑定到两个视图上,可以实现在不同视图中显示和编辑同一模型的副本。
以下是解决方法的示例代码:
// foo.html{{ model }}
// fooedit.html
// controller.js angular.module("myApp", []) .controller("myController", function($scope) { $scope.model = "This is the model"; });
通过以上代码,我们可以在foo.html
中显示模型,并在fooedit.html
中编辑模型的副本。这是因为两个视图都绑定了同一个模型对象,所以它们会实时同步更新。
原因:根据提供的信息,问题是由于在不同的视图中无法显示Angular模型的副本。这是因为每次导航到编辑时,控制器都会重新创建一个新实例。
解决方法:根据给出的建议,不应该在控制器中共享代码或状态,而应该使用Angular服务来实现。可以阅读Angular官方文档中的指南,特别是关于控制器的部分,以获取更多信息。
以下是关于问题原因和解决方法的整理:
根据我的记忆,每次导航到编辑时,控制器都会重新创建一个新实例,因此你将获得一个新的实例。你可能想要阅读这个指南,特别是这一部分:
不要在控制器中使用以下功能:
...
在控制器之间共享代码或状态 - 使用Angular服务代替。
你是完全正确的。在我提问之后,我发现了另一个类似的问题,所以我将关闭这个问题。