我的问题是我需要在运行页面的Controller时进行快速验证检查,以检查查询参数是否有效。所以现在我这样做:
if (invalid params) {
$state.go('state', {param: validParam}, {reload: true});
}
// Controller logic here to initialise the page
我期望的行为是,如果参数无效,整个Controller将使用有效参数重新加载,一切都很好。实际发生的是,即使在此$state.go
行之后,Controller的其余部分仍会尝试运行。
我设法修复此问题的唯一方法是将Controller逻辑移动到else
语句中,如下所示:
if (invalid params) {
$state.go('state', {param: validParam}, {reload: true});
} else {
// Controller logic here to initialise the page
}
这样可行,但我觉得将很多复杂的逻辑移到这个else
语句中并不理想,我希望Controller停在$state.go
并重新加载Controller ...因此为什么我使用reload: true
。
所以任何想法为什么没有按预期发生?
答案 0 :(得分:4)
好吧,return
是一个函数调用,它被执行,但不会停止进一步处理。如果我们在一个函数中,我们有控制流语句来停止执行,比如if (invalid params) {
$state.go(‘state’, {param: validParam}, {reload: true});
return;
}
:
var myFunction = function(){
...
if (invalid params) {
$state.go(‘state’, {param: validParam}, {reload: true});
return;
}
}
myFunction();
如果我们不在函数中......它是简单的JS操作集。我们应该将它们封装在这样的函数中:
class ButtonComboBox : public QComboBox
{
public:
ButtonComboBox(QWidget *parent = nullptr)
: QComboBox(parent),
_isPopupShown(false),
_timer(new QTimer(this))
{
auto lineEdit = new QLineEdit;
lineEdit->installEventFilter(this);
setLineEdit(lineEdit);
_timer->setSingleShot(true);
_timer->setInterval(100);
}
protected:
bool eventFilter(QObject *object, QEvent *event) override
{
if (object == lineEdit() && event->type() == QEvent::MouseButtonPress) {
if (!_timer->isActive()) {
if (!_isPopupShown)
showPopup();
else if (_isPopupShown)
hidePopup();
return true;
}
}
return false;
}
void showPopup() override
{
QComboBox::showPopup();
_isPopupShown = true;
_timer->start();
}
void hidePopup() override
{
QComboBox::hidePopup();
_isPopupShown = false;
_timer->start();
}
private:
bool _isPopupShown;
QTimer *_timer;
};
答案 1 :(得分:0)
您尝试过类似的事情吗?
$state.go($state.current, {param: validParam}, {reload: true});