角度何时使用花括号

时间:2016-07-26 09:43:46

标签: javascript angularjs

有时我会看到大括号,但有时候没有。我搜索了很多,但我找不到正确的问题

带花括号

iter_list_reduspeeds = split_reduspeeds.erase(iter_list_reduspeeds);
std::advance(iter_list_reduspeeds, -2);

没有大括号

ng-src="{{imageSrc}}

我问的是为什么我们不能将ng-hide="imageSrc" 写成

ng-hide

为什么ng-hide="{{imageSrc}} // doesn't work anyway src有两种不同的语法?

3 个答案:

答案 0 :(得分:6)

它完全取决于您使用的指令是“声明”的方式。

如果指令具有以下声明:

scope:{
    ngHide: '='
}

然后,您不必使用双重胡须,因为该指令需要一个对象

如果声明指令如下:

scope:{
    ngMin:'@'
}

然后,它期望一个值。如果您的值来自javascript变量,那么您必须使用花括号来插入变量中包含的字符串。

编辑:

自从我阅读角度源代码以来已经很长时间了。

我没有找到任何源代码来证明我的观点:

ngController期望字符串声明如下

var ngControllerDirective = [function() {
  return {
    restrict: 'A',
    scope: true,
    controller: '@',
    priority: 500
  };
}];

https://github.com/angular/angular.js/blob/master/src/ng/directive/ngController.js#L3

ngMaxLength

var maxlengthDirective = function() {
  return {
    restrict: 'A',
    require: '?ngModel',
    link: function(scope, elm, attr, ctrl) {
      if (!ctrl) return;

      var maxlength = -1;
      attr.$observe('maxlength', function(value) {
        var intVal = toInt(value);
        maxlength = isNaN(intVal) ? -1 : intVal;
        ctrl.$validate();
      });
      ctrl.$validators.maxlength = function(modelValue, viewValue) {
        return (maxlength < 0) || ctrl.$isEmpty(viewValue) || (viewValue.length <= maxlength);
      };
    }
  };
};

https://github.com/angular/angular.js/blob/master/src/ng/directive/validators.js#L186

答案 1 :(得分:6)

因为他们意味着两件不同的事情。 当你使用它时:

<span data-ng-bind="test">

这意味着angular将转到范围并从test获取值,并将test作为键。所以价值将是$ scope.test。但归属价值将是&#34; test&#34;

使用时

ng-src="{{imageSrc}}

然后将评估值并将其放置到属性中。因此值将是$ scope.imageSrc和属性值将是$ scope.imageSrc。

但是。并非所有标签都可以等待评估。他们认为值{{}}是正确的,不会被更改。这导致了糟糕的要求。为了解决这个问题,创建了ng-src。

答案 2 :(得分:4)

你不能写,因为两者都有不同的含义,请看这个链接 ,它完全是关于表达和模板参数。

https://docs.angularjs.org/api/ng/directive/ngSrc

ng-src=template

您可以在参数

中找到它

https://docs.angularjs.org/api/ng/directive/ngHide

ng-hide=expression

您也可以在参数

中找到它