指令内的变量发生变化,但在指令之外它不会改变。这是实际的代码:
main.html中
<div class="row" ng-repeat="row in template">
<fx-widget type="{{row.type}}" value="post[row.name]"></fx-widget>
{{post[row.name]}}
</div>
app.js
app.directive('fxWidget', function() {
return {
restrict: 'E',
scope: {
value: '='
},
link: function($scope, $element, $attributes) {
$scope.typeUrl = '/partials/' + $attributes.type + '.html';
},
template: '<div ng-include="typeUrl"></div>',
};
});
partials/text.html
<input type="text" ng-model="value">
以下是我发现问题的测试和说明:
首先我测试看看ngModel可能不喜欢通过字典/数组绑定值,所以我在main.html中添加了以下内容:
<input ng-model="post[row.name]"> {{post[row.name]}}
这个有效。
我通过更改指令中的模板变量来测试问题是否在ng-include中:
template: '<input ng-model="value">
这个实际上有效,所以问题出在ng-include
深入挖掘后,我意识到ng-include甚至不会将数据发送回指令:
template: '<div ng-include="typeUrl"></div> {{value}}'
// ^^ doesn't work
但是在部分文件中它可以工作:
partials/text.html
<input type="text" ng-model="value"> {{value}}
我猜测的是ng-include
创建范围的副本,这就是它在父范围内不会改变的原因。如何更改范围?
也是一个异质的问题。如何摆脱ng-include all并手动加载部分? templateUrl
参数可以接受具有属性的函数,但它不会将数据编译为绑定到实际变量,因此这是不可能的。
谢谢!