我的应用程序基于单页模型.我正在使用JQuery History对象来更改URL,以便在用户刷新应用程序时,我可以在用户刷新浏览器时保留应用程序的位置.它工作得很好但不知怎的它停止了工作.经过分析,我发现Angular.js正在将修改后的URL(由Jquery History API修改)更改为原始URL(用于启动Application的URL).我很惊讶和困惑为什么突然Angular JS开始重置URL.我尝试了很多,但没有找到任何根本原因.请帮助,也请建议其他可能的方法,以保留浏览器刷新(或后退按钮)上的用户位置.以下是更多细节.
//Change the browser state to support History to launch file. It will remove projectid from URL and will add fileid
function updateBrowserStateOnFileLaunch(fileId, pageTitle, stateCounter)
{
//Get current URL
var finalURL = getNormalizedHashedURL("");
//Remove projectid query string from paramter if it has and update/add fileid
finalURL = updateQueryStringParameters(finalURL, [{key:"projectid", value:undefined}, {key:"fileid", value:fileId}]);
//Change history
History.pushState({state:stateCounter,rand:getTimestampId()}, pageTitle, finalURL);
}
Run Code Online (Sandbox Code Playgroud)
注意:不添加"getNormalizedHashedURL"和"updateQueryStringParameters"方法的详细信息以保持较小的帖子.
我正在使用ng-if根据状态更改视图.
<!-- File editor view -->
<div data-ng-if="currentView === 3">
<!-- Project File view-->
</div>
Run Code Online (Sandbox Code Playgroud)
在调试期间,我看到angular.js在执行以下行后重置URL. …
我无法从AngularJS的服务器端控制器上捕获ASP.NET MVC项目的请求:
var appDirective = angular.module('app.directive', []);
var xmplService = angular.module('app.service', ['ngResource']);
var appFilter = angular.module('app.filter', []);
var app = angular.module('app', ['app.service', 'app.directive', 'app.filter', 'solo.table']);
xmplService
.factory('testResource1', function ($resource) {
return $resource('/SoloAngularTable/TestMethod3', { id: '@id' }, { charge: { method: 'POST' } });
});
app
.controller('ContentPlaceHolder1Controller', function ($scope, $http, testResource1) {
testResource1.find({ id: 123 }, function (data) {
alert('success');
});
});
Run Code Online (Sandbox Code Playgroud)
在MVC控制器上,我有一个无法捕获请求的方法:
[HttpPost]
public JsonResult TestMethod3(int id)
{
var data = new { User = "Alex" };
return Json(data);
} …Run Code Online (Sandbox Code Playgroud) 在AngularJS中,我试图将控制器调用中的参数传递给服务工厂.但是,我似乎无法获得传递的参数.该函数总是将我设置的内容传递给服务中的默认值.如果我不包含默认值,它不会传递任何内容.
例如,我的代码看起来类似于:
调节器
...
Room.enter({room_id: '5'/*$scope.room_id*/}, function(return_data)
{
//Callback function stuff.
...
}
...
Run Code Online (Sandbox Code Playgroud)
服务
...
services.factory('Room', ['$resource',
function($resource)
{
return $resource('/room/:room_id', {}, {
enter: {method: 'PUT', params:{room_id:'-1'}}
});
}
]);
...
Run Code Online (Sandbox Code Playgroud)
这样即使我试图传递5,也会调用http资源"/ room/-1".
如果我删除"enter"方法的params部分,那么"/ room"就是所有被调用的.根本没有传递任何参数.
关于我做错了什么的任何建议?非常感谢!
我已经在这几个小时了,我无法弄清楚为什么当我的rails后端引发一个正确的错误时,angular不会触发我的错误回调.我正在使用角度1.2.0rc1.
根据文件:
non-GET "class" actions: Resource.action([parameters], postData, [success], [error])
我在保存产品操作期间在角度控制器中使用它:
$scope.saveProduct = function(product){
if (product.id) {
Product.update({id: product.id},{product: product}, function(data){
console.log('handle success')
}, function(){
console.log('handle error') //THIS IS NEVER OUTPUT!
});
}
}
Run Code Online (Sandbox Code Playgroud)
这是资源定义:
angular.module('sellbriteApp.resources').factory('Product', function ($resource) {
return $resource('/api/products/:id', { id: "@id" },
{
'create': { method: 'POST' },
'index': { method: 'GET', isArray: true },
'show': { method: 'GET', isArray: false },
'update': { method: 'PUT' },
'destroy': { method: 'DELETE' }
}
);
});
Run Code Online (Sandbox Code Playgroud)
这是我的rails控制器:
def update …Run Code Online (Sandbox Code Playgroud) 使用 Angular 1.2.14,$resource 的成功回调应该返回一个对象,但它有时会得到一个 $promise。node/express Web 服务返回 null,但 Angular 将其解释为 $promise。当 Web 服务返回非空值时,成功回调按预期获取对象。
$resource('/api/users/:userId/team').get({ userId: userId }, function(team) {
console.log('team: ', team);
}, function(err) {
console.log('err: ', err);
});
Run Code Online (Sandbox Code Playgroud)
team(成功回调的参数)的值是:
$promise: Object
catch: function (callback) {
finally: function (callback) {
then: function (callback, errback, progressback) {
__proto__: Object
$resolved: true
__proto__: Resource
$delete: function (params, success, error) {
$get: function (params, success, error) {
$query: function (params, success, error) {
$remove: function (params, success, error) {
$save: function (params, success, …Run Code Online (Sandbox Code Playgroud) 我试图使用angular $ resourses访问在localhost中运行的api,chrome console给出了错误说ERR_INSECURE_RESPONSE.
我尝试在Chrome中禁用网络安全性.还是一样的错误.这是我使用的角度工厂.如何绕过此错误并测试我的应用.
ImpactPortal.factory('apiFactory', function ($resource) {
return $resource('https://localhost:8443/mifosng-provider/api/v1/client_impact_portal', {}, {
query: {
method: 'GET',
params: {},
isArray: true
}
})
});
Run Code Online (Sandbox Code Playgroud) 如果连接到我的API时出错,有人可以帮我弄清楚如何在我的AngularJS工厂中返回硬编码数据.我的硬编码数据位于另一个名为"dataFactory"的工厂中.感谢您的帮助.
service.factory("ScheduleFactory", ['$http', '$resource', '$q', 'dataFactory', function($http, $resource, $q, dataFactory) {
var objFactory = {};
objFactory.getDaysOfWeek = function(includeWeekends) {
var days = [];
var API = $resource(restURL + '/daysOfWeek/');
API.query()
.$promise
.then(function(data) {
isEmpty = (data.length === 0);
if (!isEmpty) {
days = data;
};
})
.catch(function(error) {
console.log("rejected " + JSON.stringify(error));
var data = null;
days = dataFactory.daysOfWeek;
console.log(days.length); // returns 5
});
console.log("after promise " + days.length); // returns 'after promise 0'
return days;
};
Run Code Online (Sandbox Code Playgroud)
我的dataFactory定义如下:
dataApp.factory("dataFactory", function() …Run Code Online (Sandbox Code Playgroud) 我正在使用Angular在同一个应用程序上使用RESTful API.我对一个$资源建立contacts在资源http://sample-site.com/api/contacts
这很棒而且很有效,但是我需要与/api/contacts应用程序的不同页面上的基本CRUD进行交互.
例如,我需要在托管的Web应用程序的另一个页面上再次与联系人进行交互http://sample-site/friends/{friend-id}.但是,当我尝试在该页面上使用我的联系人资源时,资源的URL将附加到当前 URL:
GET | http://sample-site/friends/1/api/contact
但我真正需要的是GET | http://sample-site/api/contact在该页面上的该资源上.
有没有办法配置资源来定义除当前页面之外的其他基本URL?
这是我尝试更改资源中的基本URL:
.factory('ContactRest', ['$resource', '$location', function($resource, $location) {
var host = $location.host()
return $resource('https://:url/:action', {}, {
// Normal CRUD actions
query: {
url : host,
action : 'api/contact',
method : 'GET',
isArray : true,
}
}]);
Run Code Online (Sandbox Code Playgroud)
这使得https://sample-site/friends/1/sample-site/api/contact.无论我如何定义$ resource,只需将任何URL附加到基本URL即可.我需要更改URL的基础.
尝试使用 angular js 的 $resource 服务从 spring restcontroller 发送 get 布尔值,但没有得到任何响应 $resource.get。我需要在客户端或服务器端添加任何额外的东西来获取布尔资源。下面是我的休息控制器和 $resource Rest 控制器的代码 -
@RequestMapping(value="validate/company/{companyName}",method=RequestMethod.GET,produces={"application/json"})
public Boolean validateCouponCode(@PathVariable("companyName") String companyName){
return companyService.exists(companyName, Column.SITE_NAME);
}
Run Code Online (Sandbox Code Playgroud)
Angular js 的 $ 资源 -
function validateCompanyFn(companyName)
return $resource("admin/rest/company/validate/company/:companyName")
.get({companyName:companyName}).$promise
}
Run Code Online (Sandbox Code Playgroud)
我在做什么错?请建议,如果有另一种使用 $resource 获取布尔响应的方法,并且在服务器端不使用任何额外的对象
这是我的js代码
var MYModule = angular.module('myApp', ['ngRoute', 'myAppServices'])
.directive('loading', ['$http', loadingDirective])
.config(myRouter);
angular.module('myAppServices', ['ngResource'])
.factory('Users', function($resource) {
return $resource('/MY/system/users');
});
function UsersCtrl($scope, Users) {
$scope.users = Users.query();
}
Run Code Online (Sandbox Code Playgroud)
在我的HTML代码中使用这个
<div ng-repeat="item in users">Hello</div>
Run Code Online (Sandbox Code Playgroud)
虽然我在/ MY/system/users的服务器代码中收到请求,但是浏览器出错了
Error: [$resource:badcfg] http://errors.angularjs.org/1.2.16/$resource/badcfg?p0=array&p1=object
at Error (native)
Run Code Online (Sandbox Code Playgroud) angular-resource ×10
angularjs ×10
javascript ×3
asp.net ×1
asp.net-mvc ×1
jquery ×1
ngresource ×1
promise ×1
rest ×1
spring ×1