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
}
});