编辑:见jsfiddle
我有一个项目列表,我通过指令将其显示为文本(这里全部简化,它比文本更复杂,但原则上是相同的)。像这样:
<body ng:controller="BaseController">
...
<div ng:controller="Controller">
<itemdir ng:repeat="item in items" item="item"></item>
</div>
...
<input ng:model="currentItem" />
</body>
当我单击它时,它应该在输入中显示单击项目的内容。
items
数组以及currentItem
属于 BaseController 范围。
该指令使用 ng:click 生成一个模板(见下文),该模板应更改 BaseController 范围的属性(称为 currentItem)。但是它对它没有任何作用(输入值不会更改为新的当前项)。在 Chrome 的 Batarang 中,我可以看到 currentItem 属性在指令范围内可见并已更改,但在 BaseController 范围内不可见。
module.directive 'itemdir', () ->
restrict: 'E'
replace: true
template: '<div ng:click="show(item)"></div>'
controller: 'EditorController'
scope:
item: '=item'
link: ($scope, $element, $attrs) ->
update = ->
$element.html($scope.item)
$scope.$watch('item', update)
为了更改属性,我尝试了一种show(item)
在 BaseController 范围内定义的方法,该方法仅将 item 参数分配给 $scope.currentItem。
即使我将 ng:click 值从更改show(item)
为currentItem = item
我知道这是一些范围问题,但似乎我仍然没有掌握它的所有细节。