标签: angular-services

angular.service vs angular.factory

我已经看到angular.factory()angular.service()用于声明服务; 但是,我在官方文档中找不到 angular.service任何地方.

这两种方法有什么区别?应该用什么(假设他们做不同的事情)?

angularjs angular-services

1061
推荐指数
8
解决办法
33万
查看次数

AngularJS:如何观察服务变量?

我有服务,说:

factory('aService', ['$rootScope', '$resource', function ($rootScope, $resource) {
  var service = {
    foo: []
  };

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

我想foo用来控制用HTML呈现的列表:

<div ng-controller="FooCtrl">
  <div ng-repeat="item in foo">{{ item }}</div>
</div>
Run Code Online (Sandbox Code Playgroud)

为了让控制器检测何时aService.foo更新,我将这个模式拼凑在一起,我将aService添加到控制器$scope,然后使用$scope.$watch():

function FooCtrl($scope, aService) {                                                                                                                              
  $scope.aService = aService;
  $scope.foo = aService.foo;

  $scope.$watch('aService.foo', function (newVal, oldVal, scope) {
    if(newVal) { 
      scope.foo = newVal;
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

这感觉很长,我一直在每个使用服务变量的控制器中重复它.有没有更好的方法来完成观察共享变量?

watch angularjs angular-services

409
推荐指数
9
解决办法
21万
查看次数

在Angular JS中的控制器之间传递数据?

我有一个显示我的产品的基本控制器,

App.controller('ProductCtrl',function($scope,$productFactory){
     $productFactory.get().success(function(data){
           $scope.products = data;
     });
});
Run Code Online (Sandbox Code Playgroud)

在我看来,我在列表中显示这些产品

<ul>
    <li ng-repeat="product as products">
        {{product.name}}
    </li>
</ul
Run Code Online (Sandbox Code Playgroud)

我想要做的是当有人点击产品名称时,我有另一个名为cart的视图,其中添加了此产品.

 <ul class="cart">
      <li>
          //click one added here
      </li>
      <li>
          //click two added here
      </li>
 </ul>
Run Code Online (Sandbox Code Playgroud)

所以我的疑问是,如何将这个点击的产品从第一个控制器传递到第二个?我认为购物车也应该是一个控制器.

我使用指令处理click事件.另外我觉得我应该使用服务来实现上述功能只是无法想象如何?因为购物车将是预定义的,所添加的产品数量可能是5/10,具体取决于用户所在的页面.所以我想保持这种通用性.

更新:

我创建了一个广播服务,在第二个控制器中我收到它.现在查询是如何更新dom的?由于我的产品列表是非常硬编码的.

javascript angularjs angular-services

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

$ parse,$ interpolate和$ compile服务有什么区别?

是什么区别$parse,$interpolate$compile服务?对我来说,他们都做同样的事情:拿模板并将其编译为模板函数.

javascript angularjs angular-services

180
推荐指数
1
解决办法
5万
查看次数

@HostBinding和@HostListener:他们做了什么,他们有什么用?

在我的蜿蜒环绕世界各地的interweb,现在特别是angular.io风格的文档,我发现许多引用@HostBinding@HostListener.看起来它们非常基础,但不幸的是,目前它们的文档有点粗略.

任何人都可以解释它们是什么,它们如何工作并举例说明它们的用法?

angular-services angular

166
推荐指数
9
解决办法
13万
查看次数

将当前范围传递给AngularJS服务

将"当前"传递$scope给AngularJS服务是否正确?

我正处于这样一种情况,我知道它仅由一个控制器消耗,并且我希望在$ service方法本身中引用控制器的范围.

这在哲学上是否正确?

或者我最好将事件广播到$ rootScope然后让我的控制器听取它们?

data-binding angularjs angularjs-scope angular-services

106
推荐指数
4
解决办法
7万
查看次数

在app config,angular.js中使用自定义提供程序中的$ http

主要问题 - 有可能吗?我试着没有运气..

主app.js

...
var app = angular.module('myApp', ['services']);
app.config(['customProvider', function (customProvider) {

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

提供者本身

var services = angular.module('services', []);
services.provider('custom', function ($http) {
});
Run Code Online (Sandbox Code Playgroud)

我有这样的错误:

Uncaught Error: Unknown provider: $http from services 
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

谢谢!

javascript angularjs angular-services

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

服务中的Angular 4+ ngOnDestroy() - 破坏可观察的

在角度应用程序中,我们有ngOnDestroy()一个组件/指令的生命周期钩子,我们使用这个钩子取消订阅observables.

我想清除/ @injectable()服务中创建的destory observable .我看到一些帖子说ngOnDestroy()可以在服务中使用.

但是,这是一个很好的做法,只有这样才能这样做,什么时候会被召唤?有人请澄清一下.

observable rxjs angular-services angular

70
推荐指数
4
解决办法
5万
查看次数

AngularJS中的视图未更新

在事件回调中更新模型时更新模型属性对视图没有影响,有什么想法可以解决这个问题吗?

这是我的服务:

angular.service('Channel', function() {        
    var channel = null; 

    return {        
        init: function(channelId, clientId) {
            var that = this;        

            channel = new goog.appengine.Channel(channelId);
            var socket = channel.open();

            socket.onmessage = function(msg) {
                var args = eval(msg.data);              
                that.publish(args[0], args[1]);
            };
        }       
    };
});
Run Code Online (Sandbox Code Playgroud)

publish() 功能是在控制器中动态添加的.

控制器:

App.Controllers.ParticipantsController = function($xhr, $channel) {
    var self = this;

    self.participants = [];     

    // here publish function is added to service
    mediator.installTo($channel); 

    // subscribe was also added with publish        
    $channel.subscribe('+p', function(name) { 
        self.add(name);     
    });                 

    self.add = function(name) …
Run Code Online (Sandbox Code Playgroud)

javascript data-binding angularjs angular-services

58
推荐指数
1
解决办法
3万
查看次数

AngularJS - UI路由器 - 以编程方式添加状态

有没有办法在模块配置后以编程方式将状态添加到$ stateProvider,例如服务?

要为这个问题添加更多上下文,我有一种情况可以采用两种方法:

  1. 尝试强制重新加载模块配置中定义的状态,问题是状态有一个reloadOnSearch设置为false,所以当我尝试$ state.go('state.name',{new:param},{reload:真正}); 没有任何反应,任何想法?

国家定义

.state('index.resource.view', {
  url: "/:resourceName/view?pageNumber&pageSize&orderBy&search",
  templateUrl: "/resourceAdministration/views/view.html",
  controller: "resourceViewCtrl",
  reloadOnSearch: false,
})
Run Code Online (Sandbox Code Playgroud)
  1. 尝试以编程方式添加我需要从服务加载的状态,以便路由可以正常工作.如果可能的话,我宁愿选择第一个选项.

javascript angularjs angular-services angular-ui-router

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