当前位置: 首页 > 面试题库 >

如何实现有条件地执行“ ui-sref”?

李昊苍
2023-03-14
问题内容

我想在浏览器遵循ui-router动态创建的链接之前验证某些条件。

我正在调查,$rootscope.$on('$stateChangeStart', ..)但无法controller.$scope从那里访问。我还需要在应用程序中的多个地方使用它,这会很麻烦。

请记住,ui-sref它链接到ui-sref-active(一起工作),因此我无法删除ui-sref,也不能$state.$go('some- state')在称为with的函数内使用ng-click

应该在a $scope function和on 内评估条件on-click event(在转换之前,可以取消条件)

我需要这样的东西:

<li ui-sref-active="active">
      <a ui-sref="somestate" ui-sref-if="model.validate()">Go Somestate</a>
</li>

我试过了:

<li ui-sref-active="active">
      <a ui-sref="somestate" ng-click="$event.preventDefault()">Go Somestate</a>
</li>

<li ui-sref-active="active">
      <a ui-sref="somestate" ng-click="$event.stopImmediatePropagation()">Go Somestate</a>
</li>

<li ui-sref-active="active">
    <a ui-sref="somestate">
       <span ng-click="$event.stopPropagation();">Go Somestate</span>
    </a>
</li>

甚至

<li ui-sref-active="active">
      <a ui-sref="somestate" onclick="return false;">Go Somestate</a>
</li>

但是不起作用。

沙盒


问题答案:

这个答案激发了我创建一条指令,该指令使我可以中断一系列事件,这些事件最终导致状态发生变化。为了方便起见和其他用途,也阻止了对同一元素执行ng-click的操作。

javascript

module.directive('eatClickIf', ['$parse', '$rootScope',
  function($parse, $rootScope) {
    return {
      // this ensure eatClickIf be compiled before ngClick
      priority: 100,
      restrict: 'A',
      compile: function($element, attr) {
        var fn = $parse(attr.eatClickIf);
        return {
          pre: function link(scope, element) {
            var eventName = 'click';
            element.on(eventName, function(event) {
              var callback = function() {
                if (fn(scope, {$event: event})) {
                  // prevents ng-click to be executed
                  event.stopImmediatePropagation();
                  // prevents href 
                  event.preventDefault();
                  return false;
                }
              };
              if ($rootScope.$$phase) {
                scope.$evalAsync(callback);
              } else {
                scope.$apply(callback);
              }
            });
          },
          post: function() {}
        }
      }
    }
  }
]);

html

<li ui-sref-active="active">
      <a ui-sref="somestate" eat-click-if="!model.isValid()">Go Somestate</a>
</li>

朋克



 类似资料:
  • 首先,请看一下代码。 对于优先级和步骤,我给出了onChange事件,因为它是一个选择表单。 此函数用于POST请求。我将每个编辑的数据发送到DB。 但是数据对象,您可以看到updateCols:[]。 在这个数组中,我必须放置已更改的属性。 例如,如果我更改标题、说明和开始日期,我必须将数组更改为 我觉得不可能每次都能查到这张申请表,所以我觉得这张申请表有问题。 有人可能只编辑标题,有人可能编辑

  • 问题内容: 这实际上可能是一个愚蠢的问题,但我想知道是否有可能使用if语句执行所有条件。我解释: 当所有三个方法都返回true时执行。关键是,当一个方法返回false时,其余方法将不会执行。这通常对性能而言是一件好事,但是如果我真的需要独立于所有方法返回的值来执行所有方法,然后对表达式求值并进入if与否,该怎么办?同样适用于OR或其他 有没有一种方法可以告诉Java采取这种方式?我目前的解决方法是

  • 对于在其生命周期的某个点隐藏的组件,呈现它的最佳方式是什么?1)渲染组件,但不显示它(显示:无)。2)只在需要时渲染组件。什么对性能更好?如果组件的道具和状态稍后更新,是否最好让组件存在,但隐藏在虚拟DOM中? 或者这个:

  • 我试图创建一个树选择组件,就像一个从antd树选择使用材料UI。我有一个material-ui、TextField和TreeView组件,一个在另一个下面。最初,我希望树视图被折叠,用户应该能够手动展开它。但是当用户在文本字段中键入一些文本时,我希望具有类似文本的节点被展开。我有代码在树中搜索文本,并获得匹配节点的节点ID。有一个名为的道具,它允许我们设置需要展开的节点ID列表。请参见下面的代码。

  • 问题内容: 我有一个组件,有时有时需要呈现为和,有时需要呈现为。在我读来确定这一点,是。 如果存在,则需要将组件包装在中。否则,它将仅呈现为。 可能? 这是我现在正在做的,但是感觉可以简化: 更新: 这是最终的锁定。感谢您的提示,@ Sulthan! 问题答案: 只需使用一个变量。 或者,您可以使用辅助函数来呈现内容。JSX和其他代码一样。如果要减少重复,请使用函数和变量。

  • 如何有条件地执行 我有一个返回Mono的方法 有人能帮我找到合适的供应商运营商吗? -谢谢