我的控制器范围内有一个变量,它的值应该在视图中使用的指令中观察,如下所示:
<grid options="gridOptions" /> // view's markup
# --- controller ---
# not important, just to show that columns loaded lazily
schemaService.getColumns().then (cols)-> $scope.columns = cols
$scope.gridOptions =
columns: $scope.columns # here, this wouldn't work
# but, if done like this:
columns: -> return $scope.columns # note: it's a function
# --- and inside the 'grid' directive ---
cols = ->
return scope.options.columns # again this wouldn't work
return scope.options.columns() # but if it's done like a function - does
scope.$watch cols, (newVal, oldVal)->
console.log "columns changed"
,true
因为你可以看到我将gridOptions.columns
的值设为一个函数 - 它可以工作,如果我将它作为一个对象 - $ watch无法看到任何更改,
我不希望它作为一个函数,我想将它作为一个对象访问,我甚至试图让gridOptions.columns
返回自我可执行文件 - 仍然没有工作
我很好奇为什么会发生这种情况
答案 0 :(得分:1)
问题是$scope.gridOptions.columns
绑定到基元。为了使其按照您的意愿运行,您需要修改控制器,以便通过引用传递列:
$scope.gridOptions = {}
schemaService.getColumns().then (cols) ->
$scope.gridOptions.columns = cols
指令中的$watch
现在将按预期对更改作出反应。