标签: angularjs-service

在AngularJs中的服务中注入dateFilter

我想知道是否有办法在AngularJs中的服务中注入过滤器.

我一直在努力

app.factory('educationService', [function($rootScope, $filter) {

    // ..... Some code

    // What I want
    console.log(dateFilter(new Date(), 'yyyy-MM-01'));

    // ..... Some code

}]);
Run Code Online (Sandbox Code Playgroud)

所以我想知道是否可以在服务中注入过滤器,或者可以通过其他方式访问它.

如果你有关于这一点的文档的链接,那将是非常好的:)一直在Angular的文档中搜索,我发现没有什么真正有用的.

谢谢 :)

javascript angularjs angularjs-service

35
推荐指数
2
解决办法
3万
查看次数

延迟angular.js $ http服务

我有一些角度工厂,用于对传统的ASP.NET .asmx Web服务进行ajax调用,如下所示:

module.factory('productService', ["$http",
function ($http) {
    return {
        getSpecialProducts: function (data) {
            return $http.post('/ajax/Products.asmx/GetSpecialProducs', data);
        }
    }
} ]);
Run Code Online (Sandbox Code Playgroud)

我正在本地网络上进行测试,因此响应时间"太"了.是否有一种聪明的方法可以将$ http延迟几秒钟来调用模拟连接错误?

或者我是否需要在$ timeout中包含对工厂方法的所有调用?

$timeout(function() {
  productService.getSpecialProducs(data).success(success).error(error);
}, $scope.MOCK_ajaxDelay);
Run Code Online (Sandbox Code Playgroud)

angularjs angularjs-service

34
推荐指数
2
解决办法
2万
查看次数

强制AngularJS服务在加载控制器之前返回数据

我在Angular中有一个服务,它使用我的API获取用户信息并将其提供给我的控制器.它的设置如下:

angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.directives', 'ngResource', 'infinite-scroll', 'ui.bootstrap', 'ngCookies', 'seo'])
  .service('userInfo', function($http, $cookies){
    $http.get('/api/users/' + $cookies.id).
    success(function(data) {
      var userInfo = data.user[0];

      return userInfo;
    });
  }). // other stuff comes after this
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我包括它:

function userProfile($scope, $cookies, userInfo, $http, $resource, $routeParams, $rootScope){
    $scope.user = userInfo;
    console.log('user info is')
    console.log(userInfo);
Run Code Online (Sandbox Code Playgroud)

这没有返回数据,而如果我在控制器本身放置相同的服务功能,它返回就好了.我在这里错过了什么?从来没有在Angular中使用DI/Services,因此在某处可能是一个简单的错误.

我需要确保服务在控制器加载之前返回数据.如何实现这一目标

javascript angularjs angularjs-service

34
推荐指数
2
解决办法
4万
查看次数

如何从angularjs中选择ng-change调用服务方法?

我是棱角分明的新手.我试图从ng-change of select中调用工厂服务方法'getScoreData',但是无法完成它.请帮忙.

Html代码:

<select ng-model="Score" ng-change="getScoreData(Score)" ng-options="c.name for c in     Scores"></select>
Run Code Online (Sandbox Code Playgroud)

Angularjs代码:

var app = angular.module('audiapp', []);

app.controller('audiLayoutCtrl', function ($scope, ScoreDataService) {
    ScoreDataService.getScoreData($scope.Score, function (data) {
        $scope.ScoreData = data;
    });
});

app.factory('ScoreDataService', function ($http) {
    return {
        getScoreData: function (Score, callback) {
            var params = {
                questionCode: Score.code
            }

            return $http({
                url: 'Home/GetAvgData',
                method: 'GET',
                params: params
            }).success(callback);
        }
    };
});
Run Code Online (Sandbox Code Playgroud)

上面是服务工厂方法,它从控制器实例化.我尝试从ng-change of select实例化,但它既没有给出错误也没有被调用.

angularjs angularjs-directive angularjs-service angularjs-factory angularjs-ng-change

32
推荐指数
1
解决办法
11万
查看次数

将第三方Javascript库包含到AngularJS应用程序中

我正在尝试在我的AngularJS应用程序中包含一个javascript库(实际上是一个handfull).到目前为止,我正在构建这个应用程序的精简版本,没有任何设计.这就是功能和数据处理的全部内容.

这是我试图添加到我的AngularJS应用程序中的第一个javascript库:https://github.com/LarryBattle/Ratio.js

首先,我尝试使用脚本src标记将其简单地包含在我的HTML文件中,但是当我尝试在我的控制器中使用它时,我收到此错误:ReferenceError:require未定义

我已经读过,最好将javascript库转换为服务或指令,甚至在使用AngularJS时将其转换为过滤器.任何人都可以提供有关最佳方法的任何见解吗?或者也许是一些相关的教程?我找不到一个足以满足我需求的简单.任何人都可以帮忙或提供一些指导吗?到目前为止,这是我的代码:

<html ng-app="myApp">
<head>
    <title>PercentCalc App</title>
</head>
<body ng-controller="MainCtrl">

Amount: <input type="number" ng-init="amountone=28" ng-model="amountone"> Value: <input type="number" ng-init="valueone=300" ng-model="valueone">
<br />
Amount: <input type="number" ng-init="amounttwo=3.5" ng-model="amounttwo"> Value: <input type="number" ng-init="valuetwo=50" ng-model="valuetwo">
<br /><br />
=========================
<br /><br />
Test ratio: {{ amountone }}/{{ amounttwo}} = {{ ratioone() }} OR {{ ratioonestring }}<br />
Test ratio: {{ amounttwo }}/{{ amountone}} = {{ ratiotwo() }}<br />

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular.min.js"></script>
<script type="text/javascript" src="js/ratio.js"></script>
<script type="text/javascript" src="js/percentcalc-ng-one.js"></script> …
Run Code Online (Sandbox Code Playgroud)

angularjs angularjs-service

32
推荐指数
2
解决办法
5万
查看次数

从简单的js代码调用angularjs服务

我有以下angularjs服务:

angular.module('app.main').factory('MyService', ["$http", function ($http) {
    return new function () {

        this.GetName = function () {
            return "MyName";
        };
    };
}]);
Run Code Online (Sandbox Code Playgroud)

如何从遗留的js代码中调用GetName函数MyService

javascript angularjs angularjs-service

29
推荐指数
3
解决办法
2万
查看次数

错误:[$ injector:unpr]未知提供者:在AngularJS服务测试中

我在为AngularJS服务正确提供依赖项方面遇到了很多麻烦.

我在StackOverflow上看到了许多其他类似错误的帖子,但它们似乎都没有解决问题.

这是应用代码:

cm.modules.app = angular.module('myApp', ['ngRoute', 'ngAnimate']);
myServiceName = function($http) {
    // do stuff
};
myServiceName.prototype.value = 1;

cm.modules.app.service('defaultAlertFactoryA', myServiceName);
Run Code Online (Sandbox Code Playgroud)

这是测试代码:

describe('test alertFactoryA', function() {
  var $provide;
  var mAlertFactoryA;

  beforeEach(module(cm.modules.app));

  beforeEach(angular.mock.module(function(_$provide_) {
    $provide = _$provide_;
  }));

  beforeEach(function() {
    inject(function($injector) {
      mAlertFactoryA = $injector.get('defaultAlertFactoryA');
    });
  });

  it('should work', function() {
    expect(true).toBe(true);
  });
});
Run Code Online (Sandbox Code Playgroud)

这是错误:

错误:[$ injector:unpr]未知提供者:defaultAlertFactoryAProvider < - defaultAlertFactoryA http://errors.angularjs.org/1.2.0-rc.2/ $ injector/unpr?p0 = defaultAlertFactoryAProvider%20%3C-%20defaultAlertFactoryA

问题:如何解决此问题,以便测试通过?

jasmine angularjs angularjs-service

29
推荐指数
3
解决办法
4万
查看次数

AngularJS:打开一个新的浏览器窗口,但仍保留范围和控制器以及服务

我正在写一个angularJS应用程序.在这个特定的控制器中,我通过该$window.open服务打开一个新的浏览器窗口.但是在新窗口中,所有$scope变量都会丢失.

我尝试使用,window.parent但这不起作用.事实上,在新的浏览器窗口中,所有应用程序服务,控制器或作用域根本不起作用,这是真的吗?有没有办法打开一个新的浏览器窗口,但仍然使新窗口属于旧窗口中相同的角度应用程序?我需要访问一些angularJS服务和打开该新窗口的控制器的范围.这有可能吗?

javascript angularjs angularjs-service angularjs-scope angularjs-controller

29
推荐指数
3
解决办法
6万
查看次数

AngularJS,这种使用服务的方式好吗?

我有这个HTML:

<p>Hello {{name}}</p>
Run Code Online (Sandbox Code Playgroud)

控制器是:

function myCtrl(scope, service) {
    scope.name = service.getUsername(); // service.getUsername() return "World!"
}
myCtrl.$inject = ['$scope', 'originalService'];
Run Code Online (Sandbox Code Playgroud)

该服务工作正常,所以我不粘贴代码...在这种情况下,结果是" Hello world! "我以这种方式更改了HTML:

<p>Hello {{service.getUsername()}}</p>
Run Code Online (Sandbox Code Playgroud)

但这不起作用.

我改变了控制器:

function myCtrl(scope, service) {
    scope.ser = service;
}
myCtrl.$inject = ['$scope', 'originalService'];
Run Code Online (Sandbox Code Playgroud)

然后是HTML

<p>Hello {{ser.getUsername();}}</p>
Run Code Online (Sandbox Code Playgroud)

这有效!

所以我的问题是:

这是直接在HTML中使用服务功能的唯一方法,还是我遗漏了什么?

javascript angularjs angularjs-service angularjs-scope

28
推荐指数
2
解决办法
2万
查看次数

如何使用angularJS拦截器来拦截特定的http请求?

我知道如何拦截所有请求,但我只想拦截来自我的资源的请求.

有谁知道如何做到这一点?

services.config(['$httpProvider',function($httpProvider) {
    $httpProvider.interceptors.push('myHttpInterceptor');
}]);

services.factory("userPurchased", function ($resource) {
    return $resource("/api/user/purchases/:action/:item", 
        {}, 
        {
            'list': {method: 'GET', params: {action: 'list'}, isArray: false},
            'save': {method: 'PUT', params: {item: '@item'}},
            'remove': {method: 'DELETE', params: {item: '@item'}},
        }
    );
});

services.factory('myHttpInterceptor', function($q,$rootScope) {
    // $rootScope.showSpinner = false;
    return {

      response: function(response) {
        $rootScope.showSpinner = false;
        // do something on success
        console.log('success');
        console.log('status', response.status);
        //return response;
        return response || $q.when(response);
      },

     responseError: function(response) {
        // do something on error
        $rootScope.showSpinner = true;
        console.log('failure');
        console.log('status', …
Run Code Online (Sandbox Code Playgroud)

angularjs angularjs-service

28
推荐指数
2
解决办法
3万
查看次数