gpt4 book ai didi

angularjs - 如何从 Angular Controller 或模块控制 toastr 选项(或全局设置)

转载 作者:行者123 更新时间:2023-12-04 12:40:44 28 4
gpt4 key购买 nike

基于 prior SO article将 toastr 注入(inject)您的应用程序/ Controller 。我的 app.js 设置如下:

(function () {

app = angular.module("app", ['breeze.angular']).value('ngToastr', toastr);

//added toaster as factory so it can be injected into any controller
angular.module('app').factory('ngNotifier', function (ngToastr) {
return {
notify: function (msg) {
ngToastr.success(msg);
},
notifyError: function (msg) {
ngToastr.error(msg);
},
notifyInfo: function (msg) {
ngToastr.info(msg);
}
}
});

})();

正如其中一个答案所述,我现在可以从任何 Controller 访问 toastr 控件。
app.controller('reportController', function ($scope, reportLibraryService, ngNotifier,  $log) {
//report section


var rvm = this;
rvm.getReportList = GetReportList;
rvm.onError = OnError;
rvm.onReportComplete = OnReportComplete;

$scope.userId = 1;
GetReportList($scope.userId);

function OnReportComplete(response) {
$scope.reportList = response;
ngNotifier.notify("Reports Loaded");

};

function OnError(reason) {
$scope.error = "Could not fetch the data.";
$log.error(reason);
};

function GetReportList(userId) {
$log.info("Getting reports for userid " + userId)
reportLibraryService.getAllReports($scope.userId).then(rvm.onReportComplete, rvm.onError);
};
});

我的问题是如何覆盖默认选项?到目前为止,我已经尝试了两种方法。首先在带有选项集的 html 中添加一个 toastr div,但这不起作用。然后我尝试在工厂中添加它们,但它们也被忽略了。
   angular.module('app').factory('ngNotifier', function (ngToastr) {
return {
notify: function (msg) {
ngToastr.success(msg);
ngToastr.options = {
"closeButton": false,
"debug": false,
"progressBar": false,
"positionClass": "toast-bottom-right",
"onclick": null,
"showDuration": "300",
"hideDuration": "1000",
"timeOut": "5000",
"extendedTimeOut": "1000",
"showEasing": "swing",
"hideEasing": "linear",
"showMethod": "fadeIn",
"hideMethod": "fadeOut"
}
}, ...

作为第二部分,toastr 是正确使用的工具,还是应该使用 angular-toaster,因为这是一个 Angular 应用程序?我目前在我的应用程序的其他任何地方都没有任何 jQuery 依赖项。

感谢您的任何建议

最佳答案

对于那些试图覆盖特定通知,而不是简单地覆盖全局默认值的人,我能够这样做,但需要注意。我想让错误持续存在(将 timeOut 设置为 0),而成功消息消失。因此,对于正常的快乐路径通知,我只使用:

toaster.success('Nothing to see here folks', 'Move along');

但是对于错误,我希望消息持续存在,以便他们可以向他们的经理展示,写下错误消息等等。这对于原始的 toastr 项目很容易,您只需将覆盖选项的 JSON 对象作为最后一个参数传递,例如:
toastr.error('Original toastr example', 'Click to dismiss', {timeOut: 0});

Angularjs-toaster 不同,您将参数传递给 pop 函数。

但这不起作用:
toaster.pop({
type: 'error',
title: 'Need More Information',
body: 'Error 42 occurred, run for the hills!',
timeOut: 0
});

我查看了 toaster.js 代码(我使用的是 0.4.15 版),看起来您可以将有序参数传递给 pop 而不是 JSON 对象。这确实有效:
toaster.pop(
'error',
'Need More Information',
'Error 42 occurred, run for the hills!',
0 );

当然,我更愿意将具有命名参数的对象传递给一堆未标记的参数。我仔细查看了他们的代码,发现他们 将区分大小写从 timeOut 更改为 timeout !!!这有效:
    toaster.pop({
type: 'error',
title: 'Need More Information',
body: 'Error 42 occurred, run for the hills!',
timeout: 0
});

关于angularjs - 如何从 Angular Controller 或模块控制 toastr 选项(或全局设置),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27625512/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com