Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法访问范围';指令中的属性_Javascript_Angularjs - Fatal编程技术网

Javascript 无法访问范围';指令中的属性

Javascript 无法访问范围';指令中的属性,javascript,angularjs,Javascript,Angularjs,我正在尝试将数据传递到指令的链接函数。当我在console.log中记录隔离作用域时,我看到了我想要的所有属性(scope.x、scope.y和scope.categories),它们的值是字符串。但由于某些原因,我无法访问指令中作用域的categories属性 {{categories}在控制器中定义为对象数组 main.html: <div bar-chart bar-data='categories' bar-x='violation_catego

我正在尝试将数据传递到指令的链接函数。当我在console.log中记录隔离作用域时,我看到了我想要的所有属性(
scope.x
scope.y
scope.categories
),它们的值是字符串。但由于某些原因,我无法访问指令中作用域的categories属性

{{categories}
在控制器中定义为对象数组

main.html:

<div bar-chart 
        bar-data='categories' 
        bar-x='violation_category' 
        bar-y='["number_violations"]'></div>
app.directive('barChart', function(){
    return {
        restrict: 'A',
        scope: {
            x: '@barX',
            y: '@barY',
            barData: '='
        },
        link: function(scope, elem, attrs){
            console.log(scope)  // shows an object that has barData array
            console.log(scope.barData)  // undefined
            console.log(scope.x)  // string
            console.log(scope.y)  // string

        }
    }
})
在控制器$scope.categories中,按如下方式填充:

Violation.categories().then(function(res){
    $scope.categories = res.data
})
如果
违规
服务的行为如下:

categories: function(){
  return $http.get('/api/violations/categories')

}

这样您将无法访问
类别中的真实对象
;使用
“=”
范围绑定(并从属性中删除
{{…}}
)。我现在在尝试访问(请参阅更新)时未定义,如果服务尚未返回,则它应该是未定义的。。。执行
link()
时,很可能服务尚未返回,
scope.categories
自然未定义。当服务返回时,作用域中会发生什么?(你可能会发现有用的)理解。必须
$watch
更改范围<代码>范围。$watch('barData',function(){//do stuff})