无法在不同的视图中显示 Angular 模型的副本

8 浏览
0 Comments

无法在不同的视图中显示 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'

});

} ]);

部分HTML非常简单:

数据:{{main.someData.name}}

解析视图

和:

Plunker 在这里。

如何才能显示我的模型的副本?这显然是一个作用域问题,但我还没有找到一个合适的解释行为的方法。

0
0 Comments

问题出现的原因是:只有一个视图,尝试为同一个模型创建两个视图。作者想要在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中编辑模型的副本。这是因为两个视图都绑定了同一个模型对象,所以它们会实时同步更新。

0
0 Comments

原因:根据提供的信息,问题是由于在不同的视图中无法显示Angular模型的副本。这是因为每次导航到编辑时,控制器都会重新创建一个新实例。

解决方法:根据给出的建议,不应该在控制器中共享代码或状态,而应该使用Angular服务来实现。可以阅读Angular官方文档中的指南,特别是关于控制器的部分,以获取更多信息。

以下是关于问题原因和解决方法的整理:

根据我的记忆,每次导航到编辑时,控制器都会重新创建一个新实例,因此你将获得一个新的实例。你可能想要阅读这个指南,特别是这一部分:

不要在控制器中使用以下功能:

...

在控制器之间共享代码或状态 - 使用Angular服务代替。

你是完全正确的。在我提问之后,我发现了另一个类似的问题,所以我将关闭这个问题。

0