相关疑难解决方法(0)

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万
查看次数

处理AngularJS Services中的数据绑定

我正试图找出当我的数据存储在服务中时如何正确处理绑定.

如果它将服务放入$ scope,然后让模板直接绑定到它,我可以使事情有效,但这似乎是一个非常糟糕的主意.

我基本上喜欢这样,以便我的视图/控制器能够轻松地改变服务中的状态,并在任何地方反映出来.

感觉我应该能够执行以下操作,但它不起作用(http://jsfiddle.net/aidankane/AtRVD/1/).

HTML

<div ng-controller="MyCtl">
    <select ng-model="drawing" ng-options="d.file for d in drawings"></select>
</div>
<div ng-controller="MyOtherCtl">
    {{ drawing }}
</div>
Run Code Online (Sandbox Code Playgroud)

JS

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

myApp.factory('myService', function(){
    var me = {
        drawings: [{'file':'a'}, {'file':'b'}]
    };
    // selected drawing
    me.drawing = me.drawings[0];
    return me;
});

function MyCtl($scope, myService){
    // can do:
    // $scope.mys = myService;
    // and then in html ng-model="mys.drawing"
    // but that seems wrong

    $scope.drawings = myService.drawings;
    $scope.drawing = myService.drawing;

    // can I not do this? …
Run Code Online (Sandbox Code Playgroud)

javascript service binding angularjs

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

AngularJS:服务变量更改未应用

我目前有一个问题,当我在一个服务中调用一个函数来改变它自己的内部变量时,它似乎不会停留,除非我从控制器更改它.当我在更改后立即将变量输出到控制台时,它会显示正确的值.但是,当我调用控制器中的一个函数将对象打印到控制台时,它会显示原始值.

有问题的变量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)

javascript angularjs angularjs-service

1
推荐指数
1
解决办法
2746
查看次数