向angularjs中的范围公开的对象添加新属性

时间:2015-07-12 19:46:28

标签: angularjs

我有一个暴露于$ scope的对象,并且附加了属性。

我在控制器中访问此对象并调用一个不起作用的服务。

我需要添加的是对象的新属性(它将作为属性附加到对象的数组),以便更新的对象返回到控制器,我可以访问此数组的元素使用数据表达式标记{{ }}

我想详细了解如何以正确的方式进行此类操作以及可能的方法。

1 个答案:

答案 0 :(得分:3)

只需将数组添加到对象中即可。

$scope.myobj = {};

...

// sometime later
var numbers = [1,2,3];
$scope.myobj.numbers = numbers;

编辑:

回答有关服务范围的问题。服务无法访问范围。通常,您会向服务部门询问IE数据。但是您的服务可以执行任何操作,例如添加2个数字,或者在您的情况下创建需要附加到对象的数组。

module.service('MyService', function() {
    this.add = function(number1, number2) {
      return number1 + number2;
    }

    this.createMyArray = function() {
       // pass in whatever you need to this service in order
       // to create the array you need.

       // example of just returning a hard coded array
       return [1,2,3];
    }
});

然后,您可以将服务注入到您想要修改范围的控制器中。

app.controller('MyController', function($scope, MyService) {

    $scope.add = function(number1, number2) {
        // Lets use our service to add these numbers and
        // assign result to scope variable
        $scope.answer = MyService.add(number1, number2);
    }

    $scope.myobj = {};
    $scope.makeArray = function() {
        // lets use our service again to create an array
        // this time lets add it to a scope object that already exists.
        $scope.myobj.numbers = MyService.createMyArray();
    }
});

很多时候服务用于从服务器获取/更新内容,因此您将看到许多进行http get / post / put / delete调用的示例。然后,您可以从控制器中使用这些服务来获取数据。但同样,您不仅限于此,您的服务也可以简单地保存一些静态数据或辅助函数。