我是一个有角度/离子的菜鸟,需要一个关于如何使用服务和工厂服务的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
答案 0 :(得分:0)
在角度服务和工厂中是特定类型的提供者。据我了解,它们旨在重用应用程序的不同控制器中的代码,因此如果您在2个或更多不同的控制器中使用函数,则只需要它们。在声明它们之后,您需要将它们作为控制器的依赖项注入。
您可能应该将函数声明为范围的变量,然后使用它,例如:
$scope.addTodoItem = function (item) {
$scope.todos.push(item);
};