在角度中,按照演示,我可以将控制器定义为:
function TodoCtrl($scope) {
$scope.todos = [
{text:'learn angular', done:true},
{text:'build an angular app', done:false},
{text:'empty dishwasher', done:false}];
$scope.oldtodos = [];
var oldtodos2 = [];
...
你会注意到我有两个oldtodos
。一个在$ scope上,一个在本地var上。如果你想要封装这个变量,我认为后一种方法是可行的 - 即除了控制器之外没有人对它感兴趣,如果你想将变量传递回模型,前者是好的
我说错了吗?
答案 0 :(得分:1)
看起来你只想保留oldTodos的私人副本,如果你必须要么回复它们或者复活它们中的一个或者某个东西。在这种情况下,将oldTodos放入范围可能是有道理的。正如Maxim所说,如果要将值绑定到视图,则范围是相关的。如果您只想保存oldTodos以便保留对它们的引用,那么正常变量就可以了。
然后,如果你想把它们中的一个带回来,只需将它复制到$ scope.todos中,然后再将它复制。
请注意,您还可以将所有待办事项抽象为服务,并将服务注入您的控制器,以实现另一级别的封装和更好的测试策略。如果有必要,它还可以让您在控制器之间共享待办事项。
答案 1 :(得分:1)
简而言之,如果您希望AngularJS应用程序与应用程序范围交互,那么您需要在范围中添加数据。而已。
$scope.oldtodos
是向范围添加数据的正确方法,可以在HTML模板中通过名称oldtodos
引用。虽然var oldtodos2
在您的控制器中是私有的,但是角度将无法访问模板中的此数据,因为它不在范围内。