【发布时间】:2016-03-31 18:28:50
【问题描述】:
我有以下 Angular 指令,它从父控制器的范围内获取数据。我的问题是,当同一指令多次添加到同一页面时,它们的范围变得相同。每当任何指令中的某个值发生更改时,所有指令中的相同值也会发生更改。
我的指令
angular.module('myapp').directive('memberAddress', function () {
return {
restrict: 'E',
templateUrl: '/Directives/memberAddress.html'
}
});
memberAddress.html:
<div class="col-md-4">
<h3>{{addressModel.title}}</h3>
</div>
父设计:
<div id="addressDiv">
<div class="row"></div>
</div>
父控制器:
angular.module('myapp').controller('MemberController', MemberController);
MemberController.$inject = ['$scope', '$compile'];
function MemberController($scope, $compile) {
$scope.addressModel = { title: ''}
$scope.addAddress = function () {
// "$scope.addressModel" Now it has some title text from UI.
var row = angular.element(document.getElementById('addressDiv')).find('.row');
var el = $compile("<member-address></member-address>")($scope);
row.append(el);
}
}
在调用 addAddress() 时,它会第一次向页面添加一个“memberAddress”指令。但是当我从 UI 添加另一个 addressModel.title 时,它会添加一个新指令,但它会更改先前添加的“memberAddress”指令中的标题,使所有指令的标题文本相同。
有什么方法可以防止其他指令发生变化?
【问题讨论】:
-
我很难理解您想要实现的目标。但可以肯定的是,您不应该在控制器中进行 DOM 操作。如果你想在页面中添加一个元素,那么在你的模型中添加一个对象到一个数组中,并使用 ng-repeat 来显示数组中的每个对象。
标签: angularjs angularjs-directive angularjs-scope