AngularJS将属性中的URL传递给指令的隔离范围 - 意外令牌':'

时间:2015-02-07 20:05:27

标签: javascript angularjs binding angularjs-directive angularjs-scope

我是AngularJS的新手,几天前刚开始使用它,如果问题本身不正确,请原谅我。

我遇到的问题是我想通过属性将URL参数传递给我的指令的隔离范围,但在:的{​​{1}}部分它给我一个错误,说http:// ...

指令的HTML部分(我称之为“它”)是这样的:

Syntax Error: Token ':' is an unexpected token at column 5 of the expression [http://

我将(?)绑定到这样的隔离范围:

<myDirective datasource="http://url"></myDirective>

如果属性的值仅包含简单字符,则可以使用。我该如何解决这个问题?

感谢。

5 个答案:

答案 0 :(得分:6)

不要使用&#39; =&#39;在指令中使用@,因为你正在传递普通字符串。

scope: {
    dataSource: '@datasource'
}

答案 1 :(得分:6)

在您的情况下,angular正在尝试评估datasource属性的值。因为你提到=,即变量的双向绑定。

如果您在'(单引号)中包装URL将解决您的问题。因为所提到的值将直接绑定到指令隔离范围变量。

<强>标记

<my-directive datasource="'http://url'"></my-directive>

答案 2 :(得分:2)

如果您想要双向数据绑定'=',则必须将其与范围变量绑定或传递带引号的字符串:

<myDirective datasource="'http://url'"></myDirective>

答案 3 :(得分:1)

Angular尝试将您的值用作变量名。

来自here:&#34;对象哈希用于设置双向绑定(使用&#39; =&#39;)或单向绑定(使用&#39; @ &#39;)父范围和隔离范围之间。还有&#39;&amp;&#39;绑定到父范围表达式。&#34;

您应该使用:

scope: {
    dataSource: '@datasource'
}

答案 4 :(得分:0)

要定义隔离范围,只需输入&#39; @&#39;进入范围定义并在指令中使用属性名称。

.directive('ggThumbnail', function()
{
    return {
        restrict: 'E',
        scope: {
            thumbnailSrc: '@',
            thumbnailWidth: '@',
            thumbnailHeight: '@'
        },
        link: function(scope, element, attrs, ctrl)
        {
            ctrl.init(element);

            attrs.$observe('thumbnailSrc', function()
            {
                if (attrs.thumbnailSrc)
                {
                    ctrl.prepareImage();
                }
            });
        }
    };
});