【问题标题】:AngularJS Service Passing ValueAngularJS 服务传递值
【发布时间】:2017-01-06 20:51:32
【问题描述】:

服务:

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

【问题讨论】:

    标签: angularjs service controller


    【解决方案1】:

    该服务不是很有用:它接受一个值作为参数,并返回该值。

    要在延迟后执行某些代码,请将这些代码包装在一个函数中并将其传递给$timeout(),或将其传递给$timeout() 返回的promise 的.then() 方法。

    $timeout(function() {
        $scope.fadeMessageSuccess = true;
    }, 2000);
    

    或者

    $timeout(angular.noop, 2000).then(function() {
        $scope.fadeMessageSuccess = true;
    });
    

    如果你真的想将 $timeout 隐藏到你自己的服务中,那么让服务像 $timeout 一样接受一个回调函数,或者将调用返回的承诺返回给 $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;
    });
    

    【讨论】:

    • 这成功了。超时工作正常,但它以 2000 毫秒超时传递“消息”值。我需要立即传递的值,并且 $scope.fadeMessageSuccess = true 是唯一超时的部分。
    • 我不知道你对这条消息做了什么。我的回答中没有任何消息,因为我不明白将消息传递给会立即返回它的服务的意义。说明您想要实现的目标。
    • 我想将类型、标题和内容直接传递给$scope,然后在2秒后触发fadeMessageSuccess。
    • 所以就做$scope.message = { type: ..., title: ..., content: ...}。为什么需要服务来做到这一点?
    • 没有看到做$scope.model = ...;比做var message = ...;更难
    猜你喜欢
    • 2016-04-20
    • 2013-08-08
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 2023-04-04
    • 2013-03-08
    • 2017-03-16
    相关资源
    最近更新 更多