我正在尝试在控制器之间共享数据。我来自C#环境,我习惯于创建一个包含私有成员的类以及一些用于检索和操作/存储数据的方法。
这是我想到的一个非常简单的例子
public class MyRepository
{
private List<string> Items { get; set; }
public MyRepository()
{
Items = new List<string>();
}
public List<string> Get()
{
return Items;
}
public string GetById(int Id)
{
return Items[Id];
}
public void AddItem(string sNewItem)
{
Items.Add(sNewItem);
}
public void DeleteItems()
{
Items.Clear();
}
}
现在回到Angular,我做了一些研究,发现为了能够共享数据(创建上面提到的存储库),我必须创建一个名为Service
的东西。好吧,没问题,我按照指南做了这样的事情:
angular.module("IP-APP", ["ngRoute"])
.factory("Item", function () {
var savedItem = {};
function set(newItem) {
savedItem = newItem;
};
function get() {
return savedItem;
};
return {
set: set,
get: get
};
})
然后我可以注入我的控制器。这很好用,直到我尝试定义我自己的方法,如GetById
。突然Angular返回.GetById is not a function
我的问题是 - 是否有可能以我已经提到的方式创建存储库(能够定义自定义函数,如GetById)?如果是的话,如何正确地做到这一点?
对此事的任何帮助都将不胜感激。
答案 0 :(得分:1)
在阅读了几篇帖子后,我意识到,我错过了最后的libc.so
声明。以下是我设法编辑代码的方法:
return
然后在我的控制器中:
angular.module("IP-APP", ["ngRoute"])
.factory("Items", function () {
this.savedItems = [];
function set(newItem) {
this.savedItems = newItem;
};
function get() {
return this.savedItems;
};
function GetById(id)
{
var returnedItem = {};
angular.forEach(this.savedItems, function (value, key) {
if (value.id == id)
returnedItem = value;
});
return returnedItem;
}
return {
set: set,
get: get,
GetById: GetById
};
})
这种方法对我的Angular应用程序中的addopt是否正确?
答案 1 :(得分:1)
请参阅使用service
方法在角度项目中共享数据的可能解决方案。
我已经模拟了您的数据设置,并按ID返回所有或特定项目。 请参阅代码或JSFiddle
查看强>
<div ng-app="myApp">
<div ng-controller="testCtrl">
<b>Get all Service data</b><br/>
<div ng-repeat="bot in data">
{{bot.name}} {{bot.id}}
</div>
<br/><br/>
<b>Get 1 item with id from service</b><br/>
{{bot.name}} - {{bot.id}}
</div>
</div>
控制器&amp;服务强>
var myApp = angular.module('myApp', []);
// Service (singleton)
myApp.service('userService', function() {
// data
var savedItems = [];
function setItem(newItem) {
if(angular.isUndefined(newItem)) return;
savedItems[newItem.id] = newItem;
};
function getAll() {
return savedItems;
};
function getById(id) {
if(angular.isUndefined(id)) return;
return savedItems[id];
};
return {
set: setItem,
getAll: getAll,
getById: getById
};
});
// controller
myApp.controller("testCtrl", function($scope, userService) {
// set data
userService.set({'name' : 'bot1', 'id':1});
userService.set({'name' : 'bot2', 'id':2});
userService.set({'name' : 'bot3', 'id':3});
userService.set({'name' : 'bot4', 'id':4});
// get all
$scope.data = userService.getAll();
// get bot1 by id 1
$scope.bot = userService.getById(1);
})