我用一个指令和 $rootScope 解决了这个问题(这有点难看,但并不比 scope.$parent 更难看)——但我仍然愿意寻求更好的解决方案。
'使用严格';
angular.module('myApp')
.directive('metaField', function ( $compile , $rootScope ) {
return {
template: '<div></div>',
restrict: 'A',
scope:true,
link: function(scope, element, attrs) {
attrs.$observe( 'fieldName',function( value ){
console.log(["appending",value]);
var myTemplate = "<label>" + value + "<input ng-model=\"" + value + "\"/><div>{{" + value + "}}</div></label>"
element.append( $compile( myTemplate )($rootScope) );
});
}
};
});
这是指令代码,这是你如何使用它
<input ng-model="fieldNames"/>
<div ng-repeat="f in fieldNames.split(',')">
{{f}}
<div meta-field field-name="{{f}}"></div>
</div>
这是一个plunkr。