对AngularJS 使用Restangular,继续从Mongolab获取对象对象.
我确定它与Promise有关,但不确定如何使用/实现这些来自旧的Java OO体验.
(旁注,就像Eloquent Javascript,一些书或资源有助于我理解'新'Javascript风格?)
小型网络应用程序适用于残疾学生,用于输入/编辑学生,更新他们放学后的时间,然后每周为他们的父母/看护人输出报告.
这是在弹出新表单时返回undefined的代码(AngularJS Boostrap UI模式)
我个人认为Restangular和文档是一个很好的补充,所以希望它不会劝阻别人 - 这只是我不太了解.
提前致谢
app.js ...
$scope.editStudent = function(id) {
$scope.myStudent = Restangular.one("students", id);
console.log($scope.myStudent);
}
Run Code Online (Sandbox Code Playgroud) 我试图得到MotorRestangular.all('Motors').getList()分配给变量的响应,a以便我以后可以使用它.问题是,如果我尝试访问a我的return函数内部,它是未定义的.我知道这不是完成我需要的正确方法,但我不知道如何以其他方式做到这一点.
myApp.factory('Configurations', function(Restangular, MotorRestangular) {
var a;
var Motors = function() {
MotorRestangular.all('Motors').getList().then(function(Motors){
a = Motors;
});
}
return {
config: function(){
Motors();
console.log(a);
var g = _.groupBy(Motors, 'configuration');
console.log(g);
var mapped = _.map(g, function(m) {
return {
id: m[0].configuration,
configuration: m[0].configuration,
sizes: _.map(m, function(a) {return a.sizeMm})
}});
}
}
});
Run Code Online (Sandbox Code Playgroud) 我有一个使用Restangular的AngularJS App在Rails 4 API之上进行持久化.我遇到的问题是我的更新无法正常工作.
我的代码在routeProvider:
when('/course/edit/:courseId', {
controller: 'CourseEdit',
templateUrl: '/assets/templates/course/form.html',
resolve: {
course: function(Restangular, $route) {
return Restangular.one('courses', $route.current.params.courseId).get();
}
}
})
Run Code Online (Sandbox Code Playgroud)
我的控制器功能:
function CourseEdit($scope, $location, course) {
$scope.course = course;
$scope.save = function() {
$scope.course.put().then(function() {
$location.path('/course/view/' + $scope.course.id);
});
};
}
Run Code Online (Sandbox Code Playgroud)
PUT的请求正在http://mysite.com/courses而不是http://mysite.com/courses/id
就像我预期的那样,我似乎无法弄明白为什么.
rails抛出的错误是'No route matches [PUT] "/courses".
任何帮助将不胜感激.
我使用Restangular来创建一个使用MEAN堆栈的简单API.
这是我的代码:
的index.html
<!DOCTYPE html>
<html data-ng-app="scotchTodo">
<head>
<!-- META -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"><!-- Optimize mobile viewport -->
<title>Node/Angular Todo App</title>
<!-- SCROLLS -->
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css"><!-- load bootstrap -->
<style>
html{
overflow-y:scroll;
}
body{
padding-top:50px;
}
</style>
<!-- SPELLS -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular-route.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/restangular/1.4.0/restangular.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore-min.js"></script>
<script src="app.js"></script>
</head>
<body>
<div data-ng-view>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
app.js
var scotchTodo = angular.module('scotchTodo', ['restangular','ngRoute']);
//config
scotchTodo.config(['$routeProvider','$locationProvider', function($routeProvider, $locationProvider) {
$routeProvider
.when('/',{
templateUrl: 'list.html',
controller: 'ListController' …Run Code Online (Sandbox Code Playgroud) app.config(function(RestangularProvider) {
RestangularProvider.addRequestInterceptor(function(element) {
console.log("Request started");
return element;
});
RestangularProvider.addResponseInterceptor(function(data) {
console.log("Request returned");
return data;
});
});
Run Code Online (Sandbox Code Playgroud)
我正在试图弄清楚如何在请求进行时创建一个微调器.我怀疑这通常是通过显示请求何时开始,并在请求完成时隐藏它来完成的.
我怎么能用Angular和Restangular做到这一点?我有拦截器设置如上,但这是在.conifg(),所以我无法访问$ rootScope或任何东西来跟踪任何div的可见性.
我正在使用Chrome浏览器浏览两个域:
一切都由nginx提供。
我收到以下错误:
XMLHttpRequest无法加载http://db.localhost:909 / matches。“ Access-Control-Allow-Origin”标头包含多个值“ *”,但只允许一个。因此,不允许访问源' http://vb.localhost:909 '。
这是两个服务器块的nginx.conf:
server {
listen 909;
server_name vb.localhost;
location / {
root "\apps\vb-site\UI\dev";
index index.html;
}
}
server {
listen 909;
server_name db.localhost;
add_header Access-Control-Allow-Origin *;
location / {
proxy_pass http://127.0.0.1:1337;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
Run Code Online (Sandbox Code Playgroud)
}
在sails.js应用程序的config / cors.js文件中,我允许所有域CORS访问:
origin: '*',
Run Code Online (Sandbox Code Playgroud)
似乎在nginx的db.localhost服务器块中添加通配符'*'之前先添加了一个空白域,因为Chrome中的错误是:',*' <-请注意先是空字符,然后是逗号,然后是*(通配符)
我的配置哪里出错了?
如何为Rectangular编写茉莉花测试,如下所示
脚本
$scope.allEmployees = [{
visible: true,
empId: "EMP148"
}];
$scope.employeeDocuments = { "EMP148": [{
"empId": "EMP148",
"department": "Sales",
"firstName": "Manu",
"lastName": "Mathew",
"place": "Kolkata"
}]
};
var employeesCopy = angular.copy($scope.allEmployees);
$scope.allEmployees.push({visible: true, empId: "EMP489"});
$scope.addEmployees = function (employeesCopy) {
var newEmployee = {visible: true, empId: "EMP489"};
var emplyeeList = {
employees: $scope.allEmployees,
newEmployee: newEmployee
};
Restangular.all('emp/getEmployees').post(emplyeeList).then(function (employees) {
if (!_.isEmpty(employees[emplyeeList.newEmployee.empId])) {
if ($scope.employeeDocuments.hasOwnProperty(emplyeeList.newEmployee.empId)) {
delete $scope.employeeDocuments[emplyeeList.newEmployee.empId];
}
$scope.employeeDocuments[emplyeeList.newEmployee.empId] = employees[emplyeeList.newEmployee.empId];
setMyEmployees(true);
$scope.flag = true;
console.log("success");
} else {
$scope.employeeDocuments …Run Code Online (Sandbox Code Playgroud) 将Restangular添加到项目时会抛出sn [Error: $injector:modulerr]错误.我确保我的一个模块没有抛出这个错误.我已经按照文档设置了它,我从他们的CDN中撤出.如果将Restangular作为依赖项删除它可以工作.
转载如下:
JS:
angular.module('app', ['restangular'])
.controller('Main', function(){
this.msg = 'Hello World'
})
Run Code Online (Sandbox Code Playgroud)
HTML:
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/restangular/1.3.1/restangular.js"></script>
<main ng-app="app" ng-controller="Main as vm">
<h1>{{vm.msg}}</h1>
</main>
Run Code Online (Sandbox Code Playgroud)
我有一个REST服务器,它返回一个Link带有对PUT的响应的HTTP头,以指示新创建的实体的URL:
Link:<entities/6>; rel="created"
Run Code Online (Sandbox Code Playgroud)
有没有可能用Restangular读取该链接头?
到目前为止我唯一能够使用Restangular拦截HTTP请求的工具是在app config中注册响应拦截器:
restangular.addResponseInterceptor(function (data, operation, what, url, response, deferred) {
console.log(response.headers())
return response.data;
});
Run Code Online (Sandbox Code Playgroud)
但是,通过上面的演示实现,记录的唯一HTTP头是content-type.不过,我可以在一个响应来确实增加了不少额外的HTTP响应头,比如浏览器工具栏的发展看Server,Date和前述Link.
为什么我无法访问完整的HTTP响应头数组addResponseInterceptor()?有没有办法使用Restangular捕获有问题的HTTP响应头?
注意:我不使用HAL或任何其他特殊响应正文格式搜索答案.我想知道我是否可以使用带有Restangular的普通HTTP头(如果没有,我可能会使用HAL或其他东西).
我正在使用Restangular进行HTTP请求。我想使用方法customPATCH。我可以在Restangular src /目录看到它在这里。
但是,当我运行“ npm install restangular”并指向dist /文件夹时,出现错误“ customPATCH不是函数”。我注意到dist /文件夹中的源代码与src /文件夹中的源代码不同(它没有定义customPATCH方法)。
对于NPM软件包,为什么src /和dist /有什么区别?这些通常保持同步吗?在这种情况下,dist /目录在8个月内没有更新。我应该只使用src /文件夹中的源代码吗?也许我误会了如何使用NPM软件包(我总是使用dist /文件夹中的源代码)...
restangular ×10
angularjs ×8
javascript ×5
github ×1
http-headers ×1
jasmine ×1
mean-stack ×1
mlab ×1
nginx ×1
promise ×1
sails.js ×1
templating ×1
unit-testing ×1