我正在尝试restangular用作rails rest api的适配器,但我不能让它正常工作.我已经下载了最新版本并将文件放在vendor/assets/javascripts文件夹中.但是一旦我尝试加载应用程序,我会收到以下错误:
Error: Unknown provider: RestangularProvider <- Restangular
at Error (<anonymous>)
at http://0.0.0.0:3000/assets/angular.js?body=1:2706:19
at Object.getService [as get] (http://0.0.0.0:3000/assets/angular.js?body=1:2832:39)
at http://0.0.0.0:3000/assets/angular.js?body=1:2711:45
at getService (http://0.0.0.0:3000/assets/angular.js?body=1:2832:39)
at invoke (http://0.0.0.0:3000/assets/angular.js?body=1:2850:13)
at Object.instantiate (http://0.0.0.0:3000/assets/angular.js?body=1:2882:23)
at http://0.0.0.0:3000/assets/angular.js?body=1:4771:24
at http://0.0.0.0:3000/assets/angular.js?body=1:4350:17
at forEach (http://0.0.0.0:3000/assets/angular.js?body=1:161:20)
Run Code Online (Sandbox Code Playgroud)
这是我的application.js文件
//= require jquery
//= require bootstrap
//= require suggest.min
//= require angular
//= require underscore
//= require restangular
//= require angular-strap.min
//= require angular-cookies
//= require angular-resource
//= require angular/index
Run Code Online (Sandbox Code Playgroud)
该应用初始化如下:
angular.module('angularApp', [
'ngCookies',
'restangular'
]);
angular.module('angularApp.services', [
'ngResource',
'sessionService', …Run Code Online (Sandbox Code Playgroud) 我有一个服务与休息角度与以下结构
function countrySvc(restangular) {
restangular.addResponseInterceptor(function (data, operation, what, url, response, deferred) {
if (operation === 'getList') {
var newResponse = response.data;
return newResponse;
}
return response;
});
var baseCountry = restangular.all('country');
this.countries = function() {
baseCountry.getList();
};
}
Run Code Online (Sandbox Code Playgroud)
也是一个控制器
function countryCtrl(scope, countrySvc) {
scope.countries = countrySvc.countries();
}
Run Code Online (Sandbox Code Playgroud)
但是当我从控制器访问国家时,结果是空的,数据成功请求,我的问题是如何从具有正确承诺模式的响应中提取数据,即(当我访问scope.countries时我需要一组国家/地区)
我正在构建一个应用程序,它支持node-mysql组合,以及前端部分的angularjs.后端REST服务已准备就绪,但我正在努力建模我的关系数据.关于这一点有一些问题:Angular.js中的$ resource关系或Angular.js中的$ resource关系[已更新].这些方法仍然是最好的方法,还是资源有任何重大变化?或者也许Restangular是要走的路?
我需要在 Restangular 中创建一个相当复杂的查询字符串。
http://vdmta.rd.mycompany.net//people?anr=Smith&attrs=givenName,displayName,name,cn
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?
到目前为止,我可以使用这个来达到 ?anr=Smith:
return Restangular.all('/people').getList({anr:searchTerm});
Run Code Online (Sandbox Code Playgroud)
最后一部分 attrs=x,y,x 让我可以控制我想要在搜索中返回的属性,并且可以根据我提出的请求进行更改。
任何建议表示赞赏。
问候
一世
好吧,几个小时都在搜索这个,但是找不到解决方案的开头.
我正在使用带有laravel后端的angularJS前端.Restangular是我的通讯服务.
我的POST很好,因为我可以在数据中包含_token,它会起作用.
但是对于Restangular来调用destroy函数它看起来像......
Restangular.all('auth/logout').remove(); //maps to AuthController@Destroy
Run Code Online (Sandbox Code Playgroud)
一切都很好,但是你会得到一个TOKENMISMATCH例外,这是一个很好的安全问题
由于我找不到将_token包含在remove中的方法,因为它实际上是无体的,所以我决定将标记放在标题中.
RestangularProvider.setDefaultHeaders({'X-XSRF-TOKEN': CSRF_TOKEN}); //CSRF_TOKEN gathered elsewhere
Run Code Online (Sandbox Code Playgroud)
在Chrome dev tolos中,我可以看到标头设置为
X-XSRF-TOKEN:ClkQIRLpFQgMg8ZT6X5CF6doCplRfdJzW8msx2JI
Run Code Online (Sandbox Code Playgroud)
X-XSRF-TOKEN 正是 VerifyCrsfToken.php所寻求的.然而,它吐出了解密错误.任何其他令牌名称,例如XSRF-TOKEN,_TOKEN,CSRF_TOKEN都会吐出令牌不匹配.
由于最后一个事实,似乎标题被正确声明,但超出我的理解范围的东西导致Laravel无法解密.而且我非常关注解密功能,但不明白它为什么会失败......
谢谢您的帮助.
我正在编写Jasmine代码来测试一些Restangular逻辑.我想测试我的'Foo' object是否已被Restangulraized,以便该foo.getList()方法将调用GET /foo并返回结果
我可以用两种方式测试这个.我可以添加.spy上foo.getList(),并使其返回预期的结果.或者,我可以$HttpBackend.whenGET("/foo")在那里使用并设置我的预期结果.
其中一个被认为是更可取的吗?
我认为HTTPBackend这是更好的选择,因为它在逻辑流程中"稍后"测试.如果我使用了一个spy我无法证明,例如,我的Restangularize没有搞砸,并试图解决一个不同的URL.
但是,我正在看继承的测试,他们都使用spy,因为我认为编写这段代码的人比我好(他们不能比我在Angular更新手),这让我想知道是否有一个优势使用spy过$httpBackend.
我已经有一个基于Codeigniter的RESTful api服务,它对mySQL数据库执行基本的CRUD操作.现在我正在尝试用angularJS和Restangular制作一个控制面板.
我发这样的POST请求:
HTML:
<form ng-submit="addUser()">
<input type="text" name="name" ng-model="newUser.name" placeholder="Enter Your Name" />
<input type="text" name="fact" ng-model="newUser.fact" placeholder="Enter A Fact" />
<input class="pure-button" type="submit" value="Send" />
</form>
Run Code Online (Sandbox Code Playgroud)
JS:
$scope.addUser = function ()
{
var newuser = $scope.newUser;
Restangular.one("user").post(newuser).then(function(data) {
console.log(data);
})
}
Run Code Online (Sandbox Code Playgroud)
PHP(使用Codeigniter的inpu类):
$data = array(
'name' => $this->input->post('name'),
'fact' => $this->input->post('fact')
);
Run Code Online (Sandbox Code Playgroud)
然后它将$ data数组写入数据库.但在数据库中,值始终为0,这意味着$ data ['name']和$ data ['fact']为空.
我想我应该在PHP中以不同的方式处理数据,但我该怎么做呢?或者POSTed数据的类型是什么?
我Restangular在我的angularjs App中使用setErrorInterceptor并用于在一个地方处理响应错误.如果发生错误,我想将用户重定向到登录页面.我知道唯一的providers&constants可注射配置阶段.
var app = angular.module('ourstandApp', ['ngRoute', 'restangular', 'ui.bootstrap', 'ngCookies', 'angularFileUpload']);
// Global configuration
app.config(function (RestangularProvider, baseRequestConfig, $routeProvider, urlsProvider) {
var getBaseRequestUrl = function () {
return baseRequestConfig.protocol + "://" + baseRequestConfig.hostName + ":" + baseRequestConfig.portNumber + baseRequestConfig.resourcePath;
}
var initializeRoute = function () {
$routeProvider.when('/', {
controller: LoginController,
templateUrl: 'views/login.html'
}).
otherwise({
redirectTo: '/'
});
}
initializeRoute();
RestangularProvider.setBaseUrl(getBaseRequestUrl());
RestangularProvider.setErrorInterceptor(function (resp) {
goToLogin(); // i want to change url to login page …Run Code Online (Sandbox Code Playgroud) 我今天开始使用Restangular和Node,在我的角度视图中尝试将新用户添加到用户列表时遇到了问题.
view.html
<input type="text" ng-model="app.user.name" />
<input type="button" ng-click="app.addUser( app.user )" />
<ul>
<li ng-repeat="user in app.users">
<strong>{{ user.name }}</strong>
<input type="button" ng-click="app.removeUser( user )" />
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
app.js
var baseUsers = Restangular.all( 'users' );
app.getUsers = function()
{
baseUsers.getList().then( function( res )
{
app.users = res;
});
};
app.getUsers();
app.addUser = function( newUser )
{
baseUsers.post( newUser ).then( function( res )
{
if( res.success == true )
{
// add new user to scope array
app.users.push( res.data ); // …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Restangular从后端检索JSON对象.
1)这很好用,但我不知道如何处理错误,因为没有回调/保证功能:
meals = restAngular.all('meal').getList({date: selectedDate}).$object;
Run Code Online (Sandbox Code Playgroud)
承诺的以下内容不起作用:
restAngular.all('meal').getList({date: selectedDate}).then(function(newMeals){
console.log(newMeals);
meals = newMeals;
});
Run Code Online (Sandbox Code Playgroud)
我在"newMeals"对象中有一个Restangular对象而不是我的Json对象.就像是 :
Run Code Online (Sandbox Code Playgroud)addRestangularMethod: function (){var g=arguments,h=a?u:this; all: function () { [native code] } allUrl: function () { [native code] } clone: function () { [native code] } customDELETE: function () { [native code] } etc..
如何使用promises并能够处理潜在的错误来获取我的JSON"餐"?
2)附加问题:自Angularjs 1.2及其更好的新$资源实施以来,Restangular仍然是一个不错的选择吗?
非常感谢
angularjs ×10
restangular ×10
codeigniter ×1
csrf ×1
jasmine ×1
javascript ×1
laravel ×1
model ×1
ngresource ×1
node.js ×1
php ×1
relational ×1
rest ×1
ruby ×1
testing ×1