传递给Angularjs指令的对象是未定义的

时间:2016-04-05 16:10:05

标签: angularjs angularjs-directive angularjs-scope

我一直在关注文档并阅读有关SO的其他问题,但我完全感到困惑。我有一个AngularJS 1.3.14应用程序。我使用ng-route语法controller-as来访问我的页面。我有一个很好的大页面。但是,我正在尝试创建一个指令,我无法将JS对象正确地传递给指令。

这是HTML:

<timechart itemsToPlot="memberData.data.adcs" title="Tares" xprop="time" yprop="tare"></timechart>

变量memberData是我的controller-as名称。在该行上方使用嵌套对象memberData.data.adcs来构建表,如果我将{{ memberData.data.adcs }}插入HTML页面,它会打印出JS对象,所以我知道那里有数据。

这是指令:

 myModule.directive('timechart', function() {
    var linker = function(scope, element, attrs) {
        var xprop = attrs['xprop'];
        var yprop = attrs['yprop'];
        var title = attrs['title'];
        console.log(typeof itemsToPlot);
        console.log(typeof scope.itemsToPlot);
        // blah blah blah elided
    };
    return {
        restrict: 'EA',
        scope: { 
            itemsToPlot: '=',
            title: '@',
            xprop: '@',
            yprop: '@'
        },
        link: linker
    };
});

当我在console.log()语句之后立即设置断点时,我看到xplot,yplot和title都可以通过attrs数组(如代码中所示)或范围对象。但是,itemsToPlot变量始终未定义。在scope对象中定义了一个itemsToPlot变量,但它总是未定义的。

我尝试了十五种形成范围的方法,命名属性,试图让变量填充。我已经查看了有关SO的所有问题,看起来我正确地做到了。我希望有人能看到我的错误!

2 个答案:

答案 0 :(得分:1)

变量确实可能已设置,但不是马上。因此,您需要做的是在指令范围上添加监视。

    zip_file = cStringIO.StringIO()
    with zipfile.ZipFile(file=zip_file, mode='w', compression=zipfile.ZIP_DEFLATED) as zf:
        for f in files:
            zf.writestr(f.file_name, f.get_data())
        for f in images:
            try:
                zf.writestr(str(f.name), f.read())
            except:
                pass

    files_email.append({
        'clinic_name': clinic.name,
        'url': send_to_s3(zip_file, file_name, 60 * 60 * 48),
    })
    zip_file.close()

答案 1 :(得分:1)

{h} itemsToPlot更改items-to-plot

<timechart items-to-plot="memberData.data.adcs" title="Tares" xprop="time" yprop="tare"></timechart>