服务:
app.factory("MessageService", ["$timeout", function($timeout) {
return function(message) {
$timeout(function() {
// $scope.fadeMessageSuccess = true;
console.log("Test");
}, 2000);
return message;
}
}]);
控制器中的代码:
var message = {
type: "success",
title: "Message Title",
content: "Message Content"
}
$scope.model = MessageService(message);
查看:
<div ng-controller="AccountCtrl" ng-cloak="">
<div class="ui {{model.type}} message message-overwrite"
ng-class="{'fade': fadeMessageSuccess} ">
<i class="close icon"></i>
<div class="header">
{{model.title}}
</div>
<p>{{model.content}}</p>
</div>
</div>
基本上,我正在试图弄清楚如何将true
的值传递给控制器内的$scope.fadeMessageSuccess
。由于你不能在服务中使用$ scope,我不确定如何在$timeout
函数中传递值。
答案 0 :(得分:0)
该服务非常有用:它将一个值作为参数,并返回该值。
要在延迟一段时间后执行某些代码,请将此代码包装在函数中并将其传递给$timeout()
,或将其传递给.then()
返回的承诺的$timeout()
方法。 / p>
$timeout(function() {
$scope.fadeMessageSuccess = true;
}, 2000);
或者
$timeout(angular.noop, 2000).then(function() {
$scope.fadeMessageSuccess = true;
});
如果你真的想要将$ timeout隐藏到你自己的服务中,那么就像$ timeout一样使服务接受回调函数,或者将调用返回的promise返回$ timeout(),这样控制器就可以了在返回的承诺上致电then()
:
app.factory("MessageService", ["$timeout", function($timeout) {
return function(callback) {
$timeout(callback, 2000);
}
}]);
...
MessageService(function() {
$scope.fadeMessageSuccess = true;
});
或
app.factory("MessageService", ["$timeout", function($timeout) {
return function() {
return $timeout(angular.noop, 2000);
}
}]);
...
MessageService().then(function() {
$scope.fadeMessageSuccess = true;
});