0

我正在研究 angularJS,我想创建通用警报功能,因此我可以在所有控制器中使用它来进行验证和其他目的。

我的服务是,

JodoModule.service("CommonSrv", function ($rootScope) {
this.showAlert = function (message, status) {
    $rootScope.alertMessage = message;
    $rootScope.showAlert = status;
}
this.hideAlert = function () {
    $rootScope.showAlert = false;
}

})

控制器一,

$rootScope.CommonSrv = CommonSrv;
    CommonSrv.showAlert("No notifications available", true);

控制器二,

$rootScope.CommonSrv = CommonSrv;
    CommonSrv.showAlert("No data available", true);

控制器调用服务,我可以在屏幕上看到警报 div 内容

我的看法是,

<div ng-show="showAlert" class="alertCustom">
    <label>{{alertMessage}}</label>
    <br /><br />
    <a ng-click="CommonSrv.hideAlert()" class="btn btn-warning  btn-sm">
        &nbsp; <span style="color:brown; font-weight:bold">OK</span> &nbsp;
    </a>
</div>

在这里,我创建了通用模板,并且分配了“alertMessage”和“showAlert”,这工作正常。但是我应该写什么来代替“???whichName???”控制器。

因为我想使用来自不同控制器的相同服务。但是当我调用“hideAlert()”操作时,它需要去哪里执行?

我们不能在 ng-Controller 目录中写入 serviceName。

那么我需要在我的代码中进行哪些更改才能使其正常工作?

4

1 回答 1

2

如果您想将所有内容保留在 中$rootScope,您也可以将其添加到您的服务中:

$rootScope.CommonSrv = CommonSrv;

然后您可以hideAlert直接从 HTML 中的该服务访问,您不需要任何ng-controller. 这是模板:

<div ng-show="showAlert" class="alertCustom">
    <label>{{alertMessage}}</label>
    <br /><br />
    <a ng-click="CommonSrv.hideAlert()" class="btn btn-warning  btn-sm">
        &nbsp; <span style="color:brown; font-weight:bold">OK</span> &nbsp;
    </a>
</div>

为了干净起见,我建议将alertMessageand保留showAlert在此服务中而不是根范围内,然后变为:

JodoModule.service("CommonSrv", function ($rootScope) {
  this.showAlert = function (message, status) {
    this.alertMessage = message;
    this.showAlert = status;
  }

  this.hideAlert = function () {
    this.showAlert = false;
  }
})

和 HTML:

<div ng-show="CommonSrv.showAlert" class="alertCustom">
    <label>{{CommonSrv.alertMessage}}</label>
    <br /><br />
    <a ng-click="CommonSrv.hideAlert()" class="btn btn-warning  btn-sm">
        &nbsp; <span style="color:brown; font-weight:bold">OK</span> &nbsp;
    </a>
</div>
于 2015-04-04T02:40:08.297 回答