的index.html
<div ng-app="myApp" ng-controller="MainCtrl">
<label>
<u>model: </u>
<input type="text" ng-model="someValue" outer="tmpl.html"/>
<hr/>
</label>
<script type="text/ng-template" id="tmpl.html">
<inner test="123"></inner>
</script>
<script src="angular.js"></script>
app.js
(function (ng) {
var app = ng.module('myApp', []);
app.controller('MainCtrl', [
'$scope',
function ($scope) {
$scope.someValue = 'Hello, World!';
}
])
// directive D2
.directive('inner', function () {
return {
restrict: 'AE',
replace: true,
template: '<p>{{model || "N/A"}}</p>',
scope: { model: '=ngModel' },
link: function (scope, element, attrs) {
scope.$watch('model', function (newValue, oldValue) {
if (!ng.isDefined(oldValue) && !ng.isDefined(newValue)) {
return;
}
// do stuff...
});
}
};
})
// directive D1
.directive('outer', [
'$templateCache',
'$compile',
function ($templateCache, $compile) {
return {
restrict: 'AE',
scope: {},
link: function (scope, element, attrs) {
var template = $templateCache.get(attrs.outer);
var compiled = $compile(template)(scope);
element.parent().append(compiled);
}
};
}
]);
})(angular);
这里有一个过于简化的版本:http://jsfiddle.net/Nscp8/12/
D1 是一个弹出窗口小部件,可以配置为插入HTML作为其内容。 D2 是一个QR码代码小部件,可以观察模型并更新更新。
ngModel绑定未正确完成,我没有从中获取更新。我在这里做错了什么?
答案 0 :(得分:3)
scope: { model: '=ngModel' },
这会将属性model
绑定到 ng-model
元素的属性inner
中定义的属性,因为您以元素的形式使用该指令。您的inner
元素没有此类属性。
但即使它有,第二个问题是inner
的父范围是outer
的范围,它也是一个孤立的范围。 someValue
在控制器范围内定义,因此无论您选择哪种绑定类型,inner
都无法直接与someValue
建立绑定。
解决方案取决于您的具体需求。有关一种可能的解决方案,请参阅this fiddle。