在添加到$ scope.someArray的上下文中,什么是“正确的方式”服务和工厂

时间:2016-02-27 23:35:59

标签: angularjs service factory

我是一个有角度/离子的菜鸟,需要一个关于如何使用服务和工厂服务的ELI5。我在解释文档方面也很糟糕。

我有一个数组java hillcipher "D:/spr16Key4.txt" "D:/hill-16spring-01",想要一个创建新待办事项的方法。我目前在这里使用此代码:

$scope.todos

当我想创建一个新的.factory('TodoItem', function () { return function TodoItem(title) { //more arguments may be added later this.title = title; } }) 时,我将使用此

TodoItem

Q1:这是使用工厂的'正确'方式吗?

现在,关于服务。我的代码坏了(下面),我不知道如何解决它,大概是因为我根本不理解服务。 Q2:你能做一个关于它应该如何工作的ELI5吗?

new TodoItem("This is a thing to do");

我(尝试)使用此代码将新的.service('addTodoItem', function () { function ($scope, todoItem) { if (!$scope.todos) $scope.todos = [todoItem]; else $scope.todos.push(todoItem); } }) 添加到数组中。

TodoItem

编辑:我尝试过观看YouTube教程并在此处提供此代码。

 $addTodoItem($scope, new TodoItem('Hello'));

我用它来添加新的.factory('createTodoItem', function () { console.log("createTodoItem factory called") function TodoItem(title) { //Constructor this.title = title; } function createTodoItem (title) { var newItem = new TodoItem(title); return newItem; } return createTodoItem; }) .provider('todoItems', function () { this.$get = function () {//the get method is called once console.log("todoItems get called") var todoItems = { items:[], add:function (todo) { console.log("todoItems add was called", this.items); todoItems.items.push(todo); console.log("todoItems now is:", todoItems.items) } }; return todoItems; } })

TodoItems

1 个答案:

答案 0 :(得分:0)

在角度服务和工厂中是特定类型的提供者。据我了解,它们旨在重用应用程序的不同控制器中的代码,因此如果您在2个或更多不同的控制器中使用函数,则只需要它们。在声明它们之后,您需要将它们作为控制器的依赖项注入。

您可能应该将函数声明为范围的变量,然后使用它,例如:

$scope.addTodoItem = function (item) {
  $scope.todos.push(item);
};