【发布时间】:2018-04-17 17:40:29
【问题描述】:
我正在尝试在一个简单的 Angularjs 应用程序中使用 AngularJS Material 的“toast”组件。
文档非常模糊,甚至没有遵循自己的规则(例如,必须使用“md-actions”类作为操作按钮)。总之,问题如下:
我使用以下配置为我的 toast 创建了一个“预设”:
$mdToastProvider.addPreset('docEditPreset', {
options: function () {
return {
templateUrl: 'App/Components/Document_Edit/DocumentEditToast.html',
hideDelay: 1200,
position: 'bottom right',
toastClass: 'document-edit-toast',
controller: 'DocumentEditController',
controllerAs: 'vm'
};
}
});
吐司的模板是:
<md-toast>
<span class="md-toast-text">{{ vm.toastText }}</span>
</md-toast>
如上面的代码所示,我在模板的<span> 标记内有一个名为vm.toastText 的变量,该变量位于DocumentEditController 中,并且应该 在toast 中可见。
DocumentEditController的代码:
vm.toastText = '';
function showToast() {
vm.toastText = 'I AM A TOAST!';
$mdToast.show(
$mdToast.docEditPreset()
);
}
(我应该提到vm 是控制器的$scope。为了保持一致性,toast 配置也被命名为相同。)
所以想法是在运行 toast 函数之前更改vm.toastText 的值。我希望在我的 toast 模板中获得更新的值。目前,toast 似乎只显示了vm.toastText 的初始值,它是一个空字符串。
如何更新 DocumentEditController 中的变量值并在 toast 模板中使用它?
Demo 在 CodePen 上
【问题讨论】:
-
每次调用
$mdToast.show()时可能会创建一个新的控制器实例。可以使用$mdToast服务的textContent(string)方法 -
在 plunker(或其他沙箱)中创建一个可运行的演示,展示您如何使用 toast
-
@charlietfl 感谢您的评论。我将尝试使用新的控制器实例来看看会发生什么。这是让事情更清晰的演示:codepen.io/DreamWalker/pen/aYgazy
-
正确。不使用服务
-
呃,我明白了。所以它创建了一个带有初始值的“TestController”的副本?如果是这样,我是否能够将原始控制器中的值链接到副本?
标签: javascript angularjs angularjs-material