官网推荐的安装方法,使用命令行工具npm
或Yarn
来安装SweetAlert
npm install sweetalert --save
然后,只需使用以下代码即可将其导入到您的应用程序:
import swal from 'sweetalert';
您还可以在unpkg和jsDelivr网站上上找到SweetAlert的CDN服务,直接引用并使用全局变量swal
。
<script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
将文件导入应用程序后,可以调用swal函数(请确保在DOM加载后再调用它!)来生成一个弹窗,参数为弹窗显示的内容,首先让我们从Hello world!
开始
swal("Hello world!");
如果传递两个参数,那么第一个参数将是弹窗的标题,第二个参数是弹窗显示的文本。
swal('这是一个标题!', '...这是弹窗显示的文本!');
添加第三个参数,您就可以在弹窗中添加一个动态图标!一共有4个预定义好的参数:"warning"
,"error"
, "success"
和 "info"
。分别表示“警告”、“错误”、“成功”和“信息”。
swal('干得漂亮!', '你点击了这个按钮!','success');
除了如上一步中快速生成一个弹窗外,也可以使用一个JSON对象作为唯一参数重写弹窗参数的方式来生成一个弹窗,如上一个示例中,如果使用参数重写方法,则代码为:
swal({
title: "干得漂亮!",
text: "你点击了这个按钮!",
icon: "success",
});
使用这种方式生成弹窗,我们可以指定更多的选项来自定义弹窗。例如,我们可以将弹窗的确认按钮的文本改为"没错!"
:
swal({
title: "干得漂亮!",
text: "你点击了这个按钮!",
icon: "success",
button: "没错!",
});
你也可以将基本写法与选项配置结合着使用,这样做可以为您节省一些写代码的时间:
swal("干得漂亮!", "你点击了这个按钮!", "success", {
button: "没错!",
});
SweetAlert使用promises
对象来跟踪用户如何与弹窗交互。如果用户单击确认按钮,则promise
将返回true
。如果弹窗被关闭(通过单击它外部),则promise
将返回null
。
swal("请单击按钮或弹窗的外部来关闭弹窗。")
.then((value) => {
swal(`返回的值为: ${value}`);
});
如果您想在执行关键操作之前警告用户,获取交互状态就可以派上用场。通过设置更多选项,我们还可以让弹窗变得更完善。
icon
参数设置为预定义的"warning"
,以显示一个漂亮的警告图标。buttons
(复数)参数设置为true
,SweetAlert除了显示默认的确认按钮之外,还将显示一个取消按钮。dangerMode
参数设置为true
,焦点将会自动设置在取消按钮而不是确认按钮上,并且确认按钮将会从默认的蓝色变为红色,以强调这是一个关键的操作。swal({
title: "操作确认",
text: "删除后,您将无法恢复此虚拟文件!",
icon: "warning",
buttons: true,
dangerMode: true,
})
.then((willDelete) => {
if (willDelete) {
swal("噗!您的虚拟文件已被删除!", {
icon: "success",
});
} else {
swal("你的虚拟文件是安全的!");
}
});
=page=
在基础用法中,我们已经学到了如何将确认按钮的文本设置为没错!
。如果还想显示自定义的取消按钮,我们可以将buttons
参数的值设置为字符串数组,数组中第一个值是取消按钮的文本,第二个值是确认按钮的文本:
swal("你确定要这么做吗?", {
buttons: ["哦不!", "没错!"],
});
如果您只想修改其中一个按钮的默认文本,那么不需要修改的那个按钮你可以赋值为true而不是字符串:
swal("你确定要这么做吗?", {
buttons: ["哦不!", true],
});
那么如果您需要的不仅仅是取消和确认按钮呢?别担心,SweetAlert依旧能够满意你的要求!
通过为按钮指定参数,您可以根据需要设置一个按钮,并指定它们在单击时返回的值!
在下面的示例中,我们设置了3个按钮:
cancel
参数,默认情况下返回值为null
并将其文本设置为"快跑!"
。catch
参数,它将生成一个自定义按钮,文本内容为"扔神奇宝贝!"
,返回值为"catch"
。defeat
参数。我们将其设定为true
,让SweetAlert为按钮设置一些默认配置。在这种情况下,它会将文本内容设置为"Defeat"
(大写),返回值设置为"defeat"
。如果我们将取消按钮设置为true
,它仍将默认返回null
。swal("前方出现了一只野生的宠物小精灵,你想要怎么做?", {
buttons: {
cancel: "逃跑!",
catch: {
text: "扔神奇宝贝球!",
value: "catch",
},
defeat: true,
},
})
.then((value) => {
switch (value) {
case "defeat":
swal("宠物小精灵被你打败了,你获得500经验值!");
break;
case "catch":
swal("恭喜", "你抓到这只宠物小精灵了!", "success");
break;
default:
swal("你安全了!");
}
});
[scode color="lblue"]您可以在文档中查看所有的可用按钮选项。[/scode]
由于SweetAlert是基于promise
对象的,所以SweetAlert可以使用基于promise
的AJAX请求函数。下面是一个使用fetch
在iTunes API上搜索艺术家的示例。请注意,我们使用了"input"
控件,以便在用户单击确认按钮时显示输入的字段内容并获取它的值:
swal({
text: '请输入想要搜索的电影名称,如:“Fast & Furious”',
content: "input",
button: {
text: "搜索!",
closeModal: false,
},
})
.then(name => {
if (!name) throw null;
return fetch(`https://itunes.apple.com/search?term=${name}&entity=movie`);
})
.then(results => {
return results.json();
})
.then(json => {
const movie = json.results[0];
if (!movie) {
return swal("未找到相关的内容!");
}
const name = movie.trackName;
const imageURL = movie.artworkUrl100;
swal({
title: "最佳匹配:",
text: name,
icon: imageURL,
});
})
.catch(err => {
if (err) {
swal("失败", "AJAX请求失败!", "error");
} else {
swal.stopLoading();
swal.close();
}
});
有时候,你可能会遇到这样一个场景:使用SweetAlert提供的开箱即用功能非常便利,但是有一些自定义的用户界面可能不仅仅需要样式按钮和文本。为此,SweetAlert准备了content
参数。
在上一个示例中,我们看到了如何将content
参数设置为"input"
以在我们的弹窗中生成一个<input />
元素,当点击确认按钮时,其默认的返回值trye
将被替换为<input />
元素所输入的内容。"input"
是为方便起见而存在的预定义选项,您可以将content
参数的值设置为任何的DOM节点!
让我们来看看,如何重新创建以下弹窗的功能......
swal("请在下面的文本框中随意输入一些内容:", {
content: "input",
})
.then((value) => {
swal(`您输入的内容为:${value}`);
});
...使用自定义DOM节点!
我们将在这里使用React UI库,他可以帮助我们了解如何创建更复杂的SweetAlert,您也可以使用任何其他你熟悉或所需的库,只要您可以从中提取DOM节点!
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
const DEFAULT_INPUT_TEXT = "";
class MyInput extends Component {
constructor(props) {
super(props);
this.state = {
text: DEFAULT_INPUT_TEXT,
};
}
changeText(e) {
let text = e.target.value;
this.setState({
text,
});
/*
* This will update the value that the confirm
* button resolves to:
*/
swal.setActionValue(text);
}
render() {
return (
<input
value={this.state.text}
onChange={this.changeText.bind(this)}
/>
)
}
}
// We want to retrieve MyInput as a pure DOM node:
let wrapper = document.createElement('div');
ReactDOM.render(<MyInput />, wrapper);
let el = wrapper.firstChild;
swal({
text: "Write something here:",
content: el,
buttons: {
confirm: {
/*
* We need to initialize the value of the button to
* an empty string instead of "true":
*/
value: DEFAULT_INPUT_TEXT,
},
},
})
.then((value) => {
swal(`You typed: ${value}`);
});
初一开始看起来或许会觉得很复杂,但实际上非常简单。我们所做的只是创建一个<input />
标签作为React组件。然后,我们提取其DOM节点并将其做为swal
函数中content
参数的值,以将其呈现为无样式元素。
其唯一的区别在于SweetAlert的代码是swal.setActionValue()
和最后的swal()
调用。其余的都只是基本的React和JavaScript。
使用这种技术,我们可以创建具有更多交互式UI的模态,例如来自Facebook的这种模式。
=page=
SweetAlert 2.0引入了一些重大的变化,以使库更易于使用并且更加的灵活。
最重要的变化是promises
不再推荐使用回调函数,并且您不再需要导入任何外部CSS文件(因为样式现在全部捆绑在了.js文件中)。
以下是一些其他已被弃用的方法及其替代方法:
swal("Hello world!")
)时,在2.0版本中该参数设置的是弹窗的文本
,而在1.0中,该参数设置的是其标题
。type
和imageUrl
两个参数在2.0版本中已替换为单个icon
参数。如果您使用的是基础弹窗(swal("Hi", "Hello world", "warning")
),则无需进行任何更改。customClass
参数在2.0版本中更名为className
。imageSize
参数,在2.0版本中,您需要在CSS中指定相应的尺寸限制。如果您有特殊用例,则可以为组件提供自定义的CLASS。showCancelButton
和showConfirmButton
参数,在2.0版本中,您可以通过设置buttons: true
来表示显示默认配置的按钮,或buttons: false
表示隐藏所有按钮。默认情况下,仅显示确认按钮。confirmButtonText
和cancelButtonText
参数。在2.0版本中,您可以设置buttons: "foo"
将确认按钮上的文本设置为foot
,或buttons: ["foo", "bar"]
将取消按钮上的文本设置为foo
,将确认按钮上的文本设置为bar
。confirmButtonColor
参数。在2.0版本中,您应该通过CSS指定所有样式的更改。作为预设的简写,您可以设置dangerMode:true
以将确认按钮变为红色。或者,您可以在buttons
参数中为每一个按钮指定一个CLASS。closeOnConfirm
和closeOnCancel
。在2.0版本中,您可以在buttons
参数中为每个按钮设置closeModal
参数。showLoaderOnConfirm
参数。在2.0版本中,当按钮的closeModal
参数设置为false
时,您的按钮将自动显示loding动画。animation
参数。在2.0版本中,所有样式更改都可以通过CSS和自定义弹窗CLASS来实现。type: "input"
, inputType
, inputValue
和 inputPlaceholder
参数在2.0版本中都已被content
对象替代。您可以通过指定content: "input"
以获取默认选项,也可以使用content
对象进一步自定义内容。HTML
。而是使用content
对象。allowEscapeKey
参数在2.0版本中更名为closeOnEsc
。allowClickOutside
参数在2.0版本中更名为closeOnClickOutside
。
—— 评论区 ——