我来自一个完全没有网络开发的背景,但是看到了mean.js正在崛起的牵引力,我真的很想试一试.
我已经在线学习了教程,所以我基本上已经开始,运行和修改了示例应用程序,但我现在正在尝试做一些与教程有关的事情.因此,我对快速和棱角有了基本的了解
我一直在尝试将激活器npm包(https://www.npmjs.org/package/activator)集成到应用程序中,虽然我已经设法适应角位,但我无法插入表达位.这让我产生了一个非常根本的疑问,我无法找到答案.我知道在Mean中,角度代码使用在express中创建的REST API连接到express代码.而且我相信使用角度服务.但我不明白怎么做.例如,users模块定义了以下服务:
angular.module('users').factory('Users', ['$resource',
function($resource) {
return $resource('users', {}, {
update: {
method: 'PUT'
}
});
}
]);
Run Code Online (Sandbox Code Playgroud)
var sayHello = function(name){
return "Hello"+name;
}
Run Code Online (Sandbox Code Playgroud)
angular.module('users').factory('Users', ['$resource',
function($resource) {
return $resource('users', {}, {
update: {
method: 'PUT'
}
});
}
]);
Run Code Online (Sandbox Code Playgroud)
var sayHello = function(name){
return "Hello"+name;
}
Run Code Online (Sandbox Code Playgroud)
我怎么能通过角度调用它?我知道我们从ngResource模块使用$ resource,但我真的不明白.
任何帮助将非常感激.
有没有办法在AngularJS中的服务之间共享数据?
使用案例:来自不同服务的数据聚合
例如,我想要一个从REST服务加载一些数据的service1.然后,另一个service2将另外的数据添加到另一个REST API的service1数据中,以创建数据聚合服务.
我基本上想要根据他们使用的API分离服务,但仍然有一个服务,最终保存所有数据.
晕,所有,
我想使用angularjs与firebase简单登录(facebook).但我不知道如何创建auth共享服务.
我想做的是
$locationif user loggedin/not-login我也是angularjs的新手,但我不知道在这种情况下我应该使用哪些服务.
service还是factory?
如何将下面的代码放在角度服务中,然后告诉每个控制器用户是否登录?
var firebaseRef = new Firebase("https://test.firebaseio.com");
var auth = new FirebaseAuthClient(firebaseRef, function(error, user) {
if (user) {
console.log(user);
} else if (error) {
console.log(error);
} else {
console.log('user not login');
}
});
Run Code Online (Sandbox Code Playgroud)
这是我猜的,如果存在user则从authService控制器中返回值authService.user然后重定向到登录页面,否则显示登录对话框,使用登录按钮调用以下代码
authService.login('facebook');
Run Code Online (Sandbox Code Playgroud)
如果我可以这样做,或者有更好的方法,请告诉我?
我有一个注入我的控制器的服务.该服务定义了许多功能.
现在我想向该服务添加一个变量,该变量将在应用程序中保存selectedItem.我这样做了:
angular.module('myservices', []).
factory('serviceA', function () {
var serviceA= {
selectedItem: selectedItem,
... more functions here
};
return serviceA;
var selectedItem;
... functions go here
});
Run Code Online (Sandbox Code Playgroud)
在我的一个控制器中,我设置了所选项目:
serviceA.selectedItem = someItem;
Run Code Online (Sandbox Code Playgroud)
在另一个控制器中,视图引用所选项目,如下所示:
<span>{{serviceA.selectedItem.value}}</span>
Run Code Online (Sandbox Code Playgroud)
即使正确设置selectedItem,也不会更新范围.我究竟做错了什么 ?
我想用AngularJS的$ http服务请求Dailymotion API,但它似乎不像jQuery那样工作.
var url = 'https://api.dailymotion.com/videos?fields=id,audience,onair&ids=xzttq2_c,xrw2w0';
Run Code Online (Sandbox Code Playgroud)
jQuery.ajax({
type: 'GET',
url: url,
dataType: 'jsonp',
success: function(data) {
console.log('Success', data);
},
error: function(data) {
console.log('Error', data);
}
});
Run Code Online (Sandbox Code Playgroud)
使用jQuery,它工作正常.我不必使用回调.
Success
Object {page: 1, limit: 10, explicit: false, has_more: false, list: Array[2]}
Run Code Online (Sandbox Code Playgroud)
$http({
method: 'jsonp',
url: url,
responseType: "json"
}).
success(function (data) {
console.log('Success', data);
}).
error(function (data) {
console.log('Error', data);
});
Run Code Online (Sandbox Code Playgroud)
但是对于Angularjs,它并没有像我预期的那样工作.
Uncaught SyntaxError: Unexpected token :
Run Code Online (Sandbox Code Playgroud) 我有一些逻辑我想包装到AngularJS工厂,所以我可以使用angular的依赖注入.由于逻辑是动态的,我不一定知道提前调用什么.我所拥有的是一个字符串,表示要调用的函数的名称.我知道我可以做类似于window["someFunctionName"]()使用字符串运行函数的东西,但由于所有内容都包含在工厂中,我不知道如何引用工厂来调用它.恩. sampleFactory["someFuncitonName"]();
我发现运行该功能的唯一方法是使用eval("someFuncitonName()").显然,如果可以,我想避免使用eval.
这是我正在尝试做的一个例子:
'use strict';
angular.module('testApp')
.factory('testFactory', function (someData) {
// User defined code that was wrapped up in a factory
function foo() {
someData.amount = 5;
}
// End dynamic code
return {
funcRunner: function(functionName) {
testFactory[functionName]();
}
};
});
Run Code Online (Sandbox Code Playgroud)
在控制器中,用户可以运行这样的东西testFactory.funcRunner("foo");.
有没有办法在这些方面做点什么testFactory[functionName]();?有没有更好的方法来做到这一点?谢谢你的帮助.
更新: 由于注释中的代码是用户定义的,我无法知道,也无法控制注释中的代码是如何编写的.我不想强迫用户施加任何限制.因此,我可以期待很少.
我使用factory如下:
var appModule = angular.module('appModule', ['ngRoute','restangular']);
appModule
.config(['$routeProvider', function($routeProvider) {
$routeProvider
.when('/home', {
templateUrl: 'home.html',
controller: 'ngHomeControl'
})
.when('/contacts', {
templateUrl: 'contacts.html',
controller: 'ngContactControl'
});
}]);
appModule
.factory('testFactory', function testFactory(Restangular) {
return {
getFriendList: function() {
return Restangular
.all('api/users/getfriendsinvitations/')
.getList()
.then(function(response) {
//
});
}
}
});
appModule
.controller('ngHomeControl', function($scope, testFactory) {
$scope.homeFriends = testFactory.getFriendList();
});
appModule
.controller('ngContactControl', function($scope, testFactory) {
$scope.contactFriends = testFactory.getFriendList();
});
Run Code Online (Sandbox Code Playgroud)
在这里,我不能获得的价值$scope.homeFriends和$scope.contactFriends从Restangular电话.任何人都可以建议我如何Restangular使用factory/ 来调用值service …
scope angularjs angularjs-service angularjs-factory restangular
在阅读有关AngularJS服务的文档时,我偶然发现了如下所示的示例服务:
myApp.service('fooGetter', ['$http', function($http) {
this.getFoo = function() {
// use $http to get some foo
}
}]);
Run Code Online (Sandbox Code Playgroud)
where $http注入到服务包装器中,以便可以从创建的服务实例中引用它.包含参数列表的数组语法的原因是什么,然后在函数参数中重复这些参数?我无法找到一个很好的解释目的,它的规则,以及为什么它是必要的.相同的服务,没有它写,如:
myApp.service('fooGetter', function($http) {
this.getFoo = function() {
// use $http to get some foo
}
});
Run Code Online (Sandbox Code Playgroud)
似乎对该变量有一个非常好的自动引用.
关于堆栈溢出有很多未知的提供者问题,到目前为止我已经看了几个,但没有一个能解决我的问题.如果我找到一个,我会删除这个问题.
这是我的代码看起来像,ExpenseTracker是angular.module:
ExpenseTracker.run(["$provide", "$q",function($provide, $q){
console.log("define gapi service")
window.gapiinit = function($q, $provide){
var gapiPromise = $q.defer().promise;
var ROOT = 'https://localhost:1800/_ah/api';
gapi.client.load('expensetTackerapi', 'v1', function() {
gapiPromise.resolve(gapi);
}, ROOT);
$provide.factory("gapi",function(){
return gapiPromise
})
}
}]
Run Code Online (Sandbox Code Playgroud)
错误看起来像这样:
Uncaught Error: [$injector:unpr] Unknown provider: $provideProvider <- $provide
http://errors.angularjs.org/1.2.7/$injector/unpr?p0=%24provideProvider%20%3C-%20%24provide
Run Code Online (Sandbox Code Playgroud) 我目前有一个问题,当我在一个服务中调用一个函数来改变它自己的内部变量时,它似乎不会停留,除非我从控制器更改它.当我在更改后立即将变量输出到控制台时,它会显示正确的值.但是,当我调用控制器中的一个函数将对象打印到控制台时,它会显示原始值.
有问题的变量Im是"isSignedIn",它总是显示为false(在登录控制器中使用$ scope.verify方法确认),即使在"console.log('Signin:'+ isSignedIn);"行之后也是如此.显示真实.
提前感谢任何指导!
服务Skype
angular.module('Skype', ['ng'])
.service('skypeClient', function () {
//Service Properties
var client = new Skype.Web.Model.Application;
this.errors = [];
this.errorCount = -1;
var isSignedIn = false;
var state = 'SignedOut';
var init = function () {
client.signInManager.state.when('SignedIn', function () {
isSignedIn = true;
console.log('Signin:' + isSignedIn); // This outputs the correct value
});
property = client.signInManager.state;
property.changed(function (status) {
state = status;
console.log("New State"+status) });
}
//Signin Function
var signIn = function (username,password) {
client.signInManager.signIn({
username: username, …Run Code Online (Sandbox Code Playgroud)