Factory中的私有变量,具有重叠名称

时间:2014-06-17 08:56:53

标签: javascript angularjs

someVar工厂中的MyData是私有的。只有get()函数才能返回该变量。我还有一个回调(使用$timeout)在1秒后更改该变量。

诀窍在于此代码中,回调变量与私有变量someVar的命名相同。

  myTask(function(someVar) {
    this.someVar = someVar;
  });

如果我将他们的名字改为不同,那就有效了。但是,如果我使用this.someVar来引用工厂的私有变量,它就无法工作。 那么如果名称可能与回调重叠,我如何在工厂中引用私有变量?

这是我的代码

http://plnkr.co/edit/n7ZdOLMfpiSflb6F9V5r?p=preview

HTML

<!DOCTYPE html>
<html ng-app="plunker">

  <head>
    <meta charset="utf-8" />
    <title>AngularJS Plunker</title>
    <script>document.write('<base href="' + document.location + '" />');</script>
    <link rel="stylesheet" href="style.css" />
    <script data-require="angular.js@1.2.x" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.17/angular.min.js" data-semver="1.2.17"></script>
    <script src="app.js"></script>
  </head>

  <body ng-controller="MainCtrl">
    <p>Hello {{someVar}}!</p>
    <button ng-click="get()">Get MyData.someVar</button>
  </body>

</html>

的Javascript

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

app.controller('MainCtrl', function($scope, MyData) {
  $scope.someVar = 0;

  MyData.runTask();

  $scope.get = function() {
    alert(MyData.get);
  }
});

app.factory('MyData', function($timeout) {
  var someVar = 1;

  return {
    runTask: function() {
      function myTask(callback) {
        $timeout(function() {
          callback(2);
        }, 1000);        
      }

      myTask(function(someVar) {
        this.someVar = someVar;
        alert('After 1 sec. someVar = ' + someVar + ' and this.someVar = ' + this.someVar);
      });
    },
    get: someVar
  }
});

0 个答案:

没有答案