从 AngularJS 中的服务属性更新$scope
update $scope from service property in angularJS
我是AngularJS的新手,我想知道为什么在下一段代码中,服务的"randomN"属性在$scope没有更新。由于我在控制器上引用了对象的服务
$scope.srvRandom = srvRandom;
为什么srvRandom.randomN
的更改没有生效?
我认为问题是"randomN"取了"r"的值而不是对它的引用,但我不知道如何让它工作。
var app = angular.module("app", []);
app.controller("cont", ['$scope','srvRandom', function ($scope, srvRandom) {
$scope.srvRandom = srvRandom;
}]);
app.factory("srvRandom", ["$interval", function ($interval) {
var randomCreator;
var r;
return {
start: function () {
console.log("START")
randomCreator = $interval(function () {
r= Math.random() * 10;
}, 2000);
},
stop: function () {
console.log("STOP")
$interval.cancel(randomCreator);
},
randomN: r
};
}]);
.HTML:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.0-rc.2/angular.min.js"></script>
<script src="test.js"></script>
</head>
<body ng-app="app" ng-controller="cont">
RandomNumber: {{srvRandom.randomN}}
<div>
<button ng-click="srvRandom.start()">START!</button>
<button ng-click="srvRandom.stop()">STOP!</button>
</div>
</body>
</html>
谢谢!
您正在访问始终0
srvRandom.randomN
。
...
randomN: 0
...
我认为你应该这样做
app.factory("srvRandom", ["$interval", function ($interval) {
var randomCreator,
randomN = 0; // Change
return {
start: function () {
console.log("START")
randomCreator = $interval(function () {
randomN = Math.random() * 10;
}, 2000);
},
stop: function () {
console.log("STOP")
$interval.cancel(randomCreator);
},
randomN: randomN // Change
};
}]);
只需更新启动方法以将其用于当前对象而不是窗口对象。
start: function() {
var that = this; //store this reference to a variable
randomCreator = $interval(function() {
that.randomN = Math.random() * 10; // use here
}, 2000);
},
这样做$scope.Random = srvRandom;
创建服务 obj 的本地实例
var app = angular.module("app", []);
app.controller("cont", ['$scope', 'srvRandom',
function($scope, srvRandom) {
$scope.random = 0;
$scope.$watch('getRandom()',function(newv){
$scope.random = newv;
});
$scope.start = function(){
srvRandom.start();
}
$scope.stop = function(){
srvRandom.stop();
}
$scope.getRandom = function(){
return srvRandom.getRandom();
}
}
]);
app.factory("srvRandom", ["$interval",
function($interval) {
var randomCreator;
var randomN = 0;
return {
start: function() {
console.log("START")
randomCreator = $interval(function() {
randomN = Math.random() * 10;
}, 2000);
},
stop: function() {
console.log("STOP")
$interval.cancel(randomCreator);
},
getRandom: function() {
return randomN;
}
};
}
]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="app" ng-controller="cont">
RandomNumber: {{random}}
<div>
<button ng-click="start()">START!</button>
<button ng-click="stop()">STOP!</button>
</div>
</body>
相关文章:
- ng在更新$scope后重复不更新信息
- 获取Div Width,然后更新Scope Variable
- 在从websocket服务器推送消息后更新$scope变量
- JavaScript未更新$scope变量的一部分
- 如何在Angular中传递此回调并更新$scope
- 离子角 单击按钮后更新$scope变量
- AngularJS:如何在承诺响应后更新$scope
- AngularJS更新$scope变量并输出到pre
- 从 AngularJS 中的服务属性更新$scope
- 更新$scope-dons'不要影响视图
- AngularJS控制器在后端数据更改时自动更新$scope
- 从AngularJS中的服务获取数据后,如何更新$scope是最好的方法
- Angular js 在
标签上的变量更新$scope动画
- 为什么在这种特殊情况下视图没有更新?($scope.$apply)
- 通过更新$scope模型更正条目后,清除角度形式验证
- 当contenteditable Elements使用Angular.js更改时,更新$scope
- Angularjs-在$resource-delete方法的回调中更新$scope的问题(thinkster.io第三章
- Angular JS,在指令中从控制器中更新$scope
- 关闭模式时更新$scope集合
- Ionic:更新$scope变量后重新加载视图