我对Angular很新,所以我希望我知道什么似乎是一个合理的设计问题.
我正在通过Angular绘制一些数据,并使用$ resource.在将Angular引入项目之前,我创建了一个图表工厂函数,用于从刚粘贴到视图中的样本json数据创建图表对象.
现在我正在使用Angular,将图表函数放入"图表"资源,Active Record样式是很诱人的,所以我有一个可以绘制,保存,更新等的东西.
虽然该模式的优点是简单,但缺点是将持久性与行为联系起来.例如,如果我想将图表设置保存到本地存储,那将是非常尴尬的.
在我的职业生涯中已经被AR咬了足够多次,我想通过保留我的图表对象,并让控制器将数据从资源传递到我的图表来与DM一起使用.
然而!我对angularjs依赖注入的朦胧理解表明我可能能够创建一个资源或一些可以接受一个公共持久性接口的资源 - 正确的单词是'范围'吗?
示例AR策略:
App.factory('Chart', [
'$resource', function($resource) {
var chart = $resource('/api/charts/:id', {
id: '@id'
});
chart.draw = function() { ... }
return chart
}
]);
App.controller('ChartsCtrl', [
'$scope', 'Chart', function($scope, Chart) {
$scope.charts = Chart.query(function() {
$.each($scope.charts, function(i, c) { c.draw() })
})
}
])
Run Code Online (Sandbox Code Playgroud)
示例DM策略:
App.chart = function(resource) {
return { draw: function() { ... } }
}
App.factory('ChartResource', [
'$resource', function($resource) {
return $resource('/api/charts/:id', {
id: '@id'
})
} …Run Code Online (Sandbox Code Playgroud) 我希望能够使用CORS来设置资源,使用CORS来请求我的数据.我有CORS使用$ http,但相同的技术不适用于$ resource我希望有人可以来救我并告诉我如何使用$ resource.
我已经修改了Angular教程的最后一步,通过在services.js文件中攻击phonecatServices服务来使用CORS.
我发现这个例子使用$ http.defaults.useXDomain = true; 删除$ http.defaults.headers.common ['X-Requested-With'];行获取使用CORS请求数据的角度但是如果我尝试$ resource.defaults.useXDomain = true; 我收到错误:"无法设置未定义的属性'useXDomain'".
我认为$ resource没有这个属性,所以我的问题是,如何使用CORS配置$ resource来发出跨域资源请求.
这是我的代码:
angular.module('phonecatServices', ['ngResource']).
factory('Phone', function($resource){
return $resource('http\\://localhost\\:8080/:phoneId.json', {}, {
query: {params:{phoneId:'phones'}, isArray:true}
});
});
Run Code Online (Sandbox Code Playgroud)
当我尝试发出请求时出现以下错误:对象#<资源>没有方法'推送'
编辑
我已经尝试设置$ http并且它大部分时间都可以工作,但是当调用资源查询时,在这种情况下是Phone.get(phoneId); 这似乎抛出了上述错误.
调用我怀疑导致错误的代码(来自controllers.js 第11步角度教程):
function PhoneDetailCtrl($scope, $routeParams, Phone) {
$scope.phone = Phone.get({phoneId: $routeParams.phoneId}, function(phone) {
$scope.mainImageUrl = phone.images[0];
});
$scope.setImage = function(imageUrl) {
$scope.mainImageUrl = imageUrl;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我删除上述方法的内部代码运行正常(没有获得网站的图像),但我不明白为什么这不起作用?我已经设置了$ http服务来使用CORS,所以应该将它传递给$ resource.
任何人都可以对此有所了解吗?(任何工作示例代码将不胜感激).
编辑:13/08/13
正如所有访问这个问题的人都知道的那样,下面的答案都没有真正回答过这个问题,我正在研究一个答案,但是如果有人发现这个并且有答案我会非常感激它.
编辑:06/09/13
目前正在调查这个项目,似乎允许我正在寻找的一切:https …
我目前正在尝试使用远程数据填充kendo网格.Kendo有自己的功能来获取数据,但我想使用我创建的角度工厂.
所以我有一个工厂,它有一个功能"getSkills".此函数从我的api获取所有技能对象.
angular.module('MyApp').factory('Factory', function ($resource) {
return $resource('/api/v1/skills/', { },
{
getSkills: { method: 'GET', isArray: true }
});
});
Run Code Online (Sandbox Code Playgroud)
在角度的SkillController中,我将这些获取的技能放在范围变量中.
$scope.skills = SkillFactory.getSkills();
Run Code Online (Sandbox Code Playgroud)
我在这里初始化Kendo网格:
$scope.gridOptions = {
dataSource: {
data: $scope.skills,
schema: {
model: {
fields: {
ID: { type: "number" },
Name: { type: "string" },
CreatedBy: { type: "number" },
CreatedDate: { type: "string" },
EditedBy: { type: "number" },
EditedDate: { type: "string" },
InUse: { type: "boolean" }
}
}
},
pageSize: 20
},
scrollable: …Run Code Online (Sandbox Code Playgroud) 使用Tastypie和AngularJS $资源我想执行一组更新,创建和删除操作.
目前,我播放了一个活动:
$rootScope.$broadcast('save');
Run Code Online (Sandbox Code Playgroud)
每个负责使用该$resource服务创建,更新和删除的控制器都会捕获该事件:
ResourceService.update({id:$scope.id}, $scope.element).$promise.then(function(element) {
$scope.$emit('saved');
});
Run Code Online (Sandbox Code Playgroud)
现在,这会导致客户端和服务器端的某些竞争条件.
在REST方式中以批处理方式执行这组操作的最简单方法是什么?
我是Angular的新手.我相信我在这里缺少一些基本的东西.
我有一个对象,我发布到服务器来创建它.服务器返回对象Id,我需要读取它并更新客户端中的对象.
服务器只返回对象ID,但是,在客户端,我有其他数据,当我执行回调时我无法使用(我无法访问原始数据).
//Get Angular Project module
var app = angular.module("app", ['ngResource']);
//create Project factory
app.factory('Project', function ($resource) {
return $resource('http://cmsanalyticsdev.pearson.com\\:8081/api/projects/:projectid',
{projectid:'@id'},
{update: {method:'PUT', isArray:false}}
);
});
//Controller for testing
app.controller('ApplicationController', function ($scope, Project) {
//Project object
var project = new Project({"name":"New Project Test","thumbnail":"","statusid":"521d5b730f3c31e0c3b1e764","projecttypeid":"521f585c092a5b550202e536","teamid":"521f585a092a5b550202e521","authors":[{"firstname":"Dilip","lastname":"Kumar"}],"projectspecificmetadata":{"isbn13":"345345","guid":"asfas"},"modifiedby":"521f585a092a5b550202e525"}
);
//Create new project
project.$save(project, function (projectResponse) {
project.projectId = projectResponse._id;
alert(project.name);
});
});
Run Code Online (Sandbox Code Playgroud) 我正在尝试将PUT添加到ng-resource中的默认方法.到目前为止,我将DEFAULT_ACTIONS修改为:
var DEFAULT_ACTIONS = {
'get': {method:'GET'},
'save': {method:'POST'},
'update': {method:'PUT'},
'query': {method:'GET', isArray:true},
'remove': {method:'DELETE'},
'delete': {method:'DELETE'}
};
Run Code Online (Sandbox Code Playgroud)
但这感觉非常hacky,当我更新模块时显然不会持久.有没有办法可以将更新/放置添加到所有将持续更新的ng-resource对象?
当尝试copies在AngularJS资源上轮询自定义方法时,我得到以下错误angular.js:10033:(该方法copy工作正常.)
TypeError: undefined is not a function
at https://code.angularjs.org/1.3.0-beta.8/angular-resource.min.js:9:347
at Array.forEach (native)
at q (https://code.angularjs.org/1.3.0-beta.8/angular.min.js:7:280)
at q.then.p.$resolved (https://code.angularjs.org/1.3.0-beta.8/angular-resource.min.js:9:329)
at J (https://code.angularjs.org/1.3.0-beta.8/angular.min.js:101:5)
at J (https://code.angularjs.org/1.3.0-beta.8/angular.min.js:101:5)
at https://code.angularjs.org/1.3.0-beta.8/angular.min.js:102:173
at g.$eval (https://code.angularjs.org/1.3.0-beta.8/angular.min.js:113:138)
at g.$digest (https://code.angularjs.org/1.3.0-beta.8/angular.min.js:110:215)
at g.$apply (https://code.angularjs.org/1.3.0-beta.8/angular.min.js:113:468)
Run Code Online (Sandbox Code Playgroud)
Angular.js 10016 - 10035:
function consoleLog(type) {
var console = $window.console || {},
logFn = console[type] || console.log || noop,
hasApply = false;
// Note: reading logFn.apply throws an error in IE11 in IE8 document mode.
// The reason …Run Code Online (Sandbox Code Playgroud) javascript angularjs angularjs-directive angularjs-scope angularjs-resource
我是AngularJS的初学者,在这段代码中找不到我的错误
var myCarResource = $resource('cars/:carId',
{
carId:'@id'
});
var car = myCarResource.get({id:'abc'});
Run Code Online (Sandbox Code Playgroud)
预期网址:
.../cars/abc
被叫URL是:
.../cars?id=abc
我正在使用angularjs v1.2.24
谁能帮我?谢谢
相当简单的问题,只是找不到好的/干净的方式来做这个而不打电话给另一个发现
我已经使用Angular-Resource绑定了我的节点应用程序,而我只是对新数据或更改数据进行了一些往返数据调用.
所以ngResource $save()打电话给我/api/users/:id这样的.Node通过创建或查找用户,进行更新并保存它们来响应此调用.
无论是通过create()还是save(),它都会返回创建的记录,而现在,我使用res.json(user)溢出已创建/返回的Angular记录来处理使用更新的信息填充我的视图
现在,我知道Sequelizes find()和findAll()方法,我可以findAll({ include: [{ all: true }]})单独使用或指定我的模型.
我想知道的是,在save/create上获取记录关联的最佳方法是什么
不幸的是,这不起作用:
models.User.create(newuser, {include:[{ all: true }]}).then(function(user) {
res.json(user);
});
Run Code Online (Sandbox Code Playgroud)
我是否真的必须执行另一个 find()才能获得我的托管模型关联?
javascript node.js sequelize.js angularjs angularjs-resource
我想在 $ resource构造url 之前以编程方式更改路由参数.我无法使用angular的http拦截器来执行此操作,因为此时路由已经连接在一起.
给出一个Assortment.model.js
module.exports = function($resource) {
return $resource("", {}, {
get: {
url: "/assortment/:model/:id",
method: "GET",
params: {id: "@id", model: "@model"} //< this needs to be uppercase
}
});
};
Run Code Online (Sandbox Code Playgroud)
......和一些controller.js
["Supplier", function(Supplier) {
Supplier.Assortment.get({ id: 5, model: "user" })
}]
Run Code Online (Sandbox Code Playgroud)
如何强制执行始终转换{model: "user"}为的挂钩{model: "User"}
javascript angularjs angularjs-resource ngresource angularjs-http
angularjs ×10
javascript ×6
cors ×1
jsonp ×1
kendo-grid ×1
kendo-ui ×1
ngresource ×1
node.js ×1
rest ×1
sequelize.js ×1
tastypie ×1