指令链接attrs不起作用

时间:2016-02-07 13:27:46

标签: angularjs angularjs-directive

在html中我用<div godata-pagination count="{{pagination.count}}" size="{{pagination.size}}" page="{{pagination.page}}"></div>

调用我的指令

然后我的指令在里面看:

function link(scope, element, attrs) {
    console.log('attrs: ' + attrs.size);
    scope.pagCount = attrs.count;
    scope.pagPage = attrs.page;
}
return {
    restrict: 'A',
    transclude: true,
    scope: {
        count: '@',
        size: '@',
        page: '@'
    },
    templateUrl: 'partials/godata/pagination.html',
    link: link
};

在partial(partials / godata / pagination.html)中,我可以访问这些变量(计数,大小和页面)。对于100%的部分i,原始访问这三个变量,在此范围内没有其他变量。

但我会在功能链接中对这些变量做些什么。 如果我尝试通过attrs在函数链接中访问这些变量,它们是空的:(

出了什么问题和/或我能做什么?

更新:

console log output

scope: false范围变量未定义。

为什么将行attrs.$observe('page', function(val) { console.log('$observe: ' + val); });带入功能链接两个输出中...一个带有一个没有值?

再次更新:

function link(scope, element, attrs) {
    console.log('scope: ' + scope.size);
    console.log('scope: ' + scope);
    console.log('attrs: ' + attrs.size);
    console.log('attrs: ' + attrs);
    attrs.$observe('size', function(size) {
        console.log('$observe: ' + size);
        if(size) {
            scope.pagSize = size;
        }
    });
    console.log('after observe; pagSize: ' + scope.pagSize);
}

...带我:

console log output

scope.pagSize在浏览器中有值。

如果我无法访问这些属性,我如何在我的指令中使用这些属性?!

2 个答案:

答案 0 :(得分:0)

它们与指令的范围绑定。

您可以使用scope.pagescope.count来访问它们。

答案 1 :(得分:0)

正如@Hristo Enev回答:当你有孤立的范围时,最好是访问 有scope.pagescope.count

的人

但如果您坚持使用属性

就是这样:

attrs.$observe('page', function(val) { console.log(val) })

会产生页面属性的值。

在链接函数中,您应该使用$ observe()来获取插值。