在angular.js中的内联条件语句

33 浏览
0 Comments

在angular.js中的内联条件语句

我想知道在Angular中是否有一种方式可以有条件地显示内容,而不是使用ng-show等指令。例如,在backbone.js中,我可以在模板中使用内联内容来做一些事情,如下所示:

<% if (myVar === "two") { %>显示这个<% } %>


但是在Angular中,我似乎只能通过显示和隐藏包裹在HTML标签中的内容来实现。

我被隐藏了

我被显示了


在Angular中,使用{{}}而不是将内容包裹在HTML标签中,有没有推荐的方式来有条件地显示和隐藏内联内容?

0
0 Comments

在Angular.js中,有多种方式可以实现内联条件(inline conditionals)。下面将介绍一些常用的方法:

1. 在$scope中定义一个函数:

app.controller('MyCtrl', function($scope) {
   $scope.foo = 1;
   $scope.showSomething = function(input) {
        return input == 1 ? 'Foo' : 'Bar';
   };
});
{{showSomething(foo)}}

在这种方法中,我们在$scope中定义了一个名为showSomething的函数,根据传入的参数input的值,返回不同的结果。

2. 使用ng-show和ng-hide指令:

FooBar

使用ng-show和ng-hide指令可以根据条件的真假来显示或隐藏元素。

3. 使用ngSwitch指令:

Foo Bar What?

ngSwitch指令根据不同的条件值来选择显示不同的内容。

4. 自定义过滤器:

app.filter('myFilter', function() {
  return function(input) {
    return input == 1 ? 'Foo' : 'Bar';
  }
}
{{foo | myFilter}}

通过自定义过滤器,我们可以对传入的值进行处理,并返回不同的结果。

5. 自定义指令:

app.directive('myDirective', function() {
  return {
    restrict: 'E',
    replace: true,
    link: function(scope, elem, attrs) {
      scope.$watch(attrs.value, function(v) {
         elem.text(v == 1 ? 'Foo': 'Bar');
      });
    }
  };
});

使用自定义指令可以在元素中动态地显示不同的内容。

在大多数情况下,我会选择在$scope中定义一个函数,这样可以保持标记的整洁,并且实现起来也非常简单。但如果需要多次重复相同的操作,则最好选择使用过滤器或者指令来实现。最重要的是,选择的解决方案应该易于维护,并且最好是可测试的。具体使用哪种方法,取决于具体的情况。

0
0 Comments

在Angular.js中,存在一种问题,即如何使用内联条件语句。这个问题的出现是因为在Angular 1.1.4之前的版本中,没有内置的内联条件语句。然而,我们可以通过创建一个过滤器来解决这个问题。

以下是一个解决方案的示例代码:

app.filter('iif', function () {
   return function(input, trueValue, falseValue) {
        return input ? trueValue : falseValue;
   };
});

这个过滤器可以像这样使用:

{{foo == "bar" | iif : "it's true" : "no, it's not"}}

然而,有一个问题是如果尝试在其中一个值中插入HTML标签,会导致代码中断。为了解决这个问题,可以使用`ng-bind-html-unsafe`指令来允许HTML输出。但是,在行内条件语句中使用这个指令可能不太容易实现。

关于为什么使用`iif`而不是`if`的原因是,`iif`是"Inline If"的缩写,在不同的编程语言中很常见,只是不如`?:`内联条件语句那样常见。

通过创建一个过滤器并使用`iif`来实现内联条件语句是解决这个问题的方法。但是,如果需要在其中一个值中插入HTML标签,则需要额外使用`ng-bind-html-unsafe`指令,可能需要进一步的尝试和测试来实现。

0
0 Comments

在Angular.js中,引入了对三元运算符的支持。这个问题的原因是用户想要在表达式中嵌套变量,以便在变量为false时只显示变量的值。他尝试使用{{myVar === "two" ? "it's true" : {{myVar}}}},但是这种写法是错误的。解决方法是不需要将myVar包裹在额外的大括号中,因为它已经在表达式中。正确的写法是{{myVar === "two" ? "it's true" : myVar}}。这种写法可以在指令中使用,以显示或隐藏一个显示图片的链接。另外还有一些其他的示例,其中包含了更多的使用情况。

0