AngularJS服务传递值

时间:2017-01-06 20:51:32

标签: angularjs service controller

服务:

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函数中传递值。

1 个答案:

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