0

在 Angular 中,按照演示,我可以将控制器定义为:

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 上,一个只是本地变量。如果你想封装这个变量,我认为后一种方法是要走的路 - 即除了控制器之外没有人对它有任何兴趣,如果你想将变量传递回模型,前者很好

我对么?

4

2 回答 2

1

看起来您只是想保留 oldTodos 的私人副本,以防您必须参考它们或复活其中一个或其他东西。在这种情况下,不将 oldTodos 放入范围可能是有意义的。正如 Maxim 所说,如果要将值绑定到视图,则范围是相关的。如果您只想保存 oldTodos 以便保留对它们的引用,则可以使用普通变量。

然后,如果您想将其中一个带回来,只需将其复制到 $scope.todos 并返回即可。

请注意,您还可以将所有待办事项抽象为一个服务,并将该服务注入您的控制器,以实现另一个级别的封装和更好的测试策略。如果有必要,它还可以让您跨控制器共享待办事项。

于 2013-08-18T19:53:25.490 回答
1

长话短说,如果您希望 AngularJS 应用程序与应用程序范围进行交互,那么您需要在范围内添加数据。而已。

$scope.oldtodos是将数据添加到范围的正确方法,并且可以oldtodos在 HTML 模板中按名称引用。虽然var oldtodos2在您的控制器中是私有的,因此 Angular 将无法访问模板中的此数据,因为它不在范围内。

于 2013-08-19T02:27:22.380 回答