【发布时间】:2015-10-18 14:31:06
【问题描述】:
我正在尝试创建一个 AngularJS 指令来处理模式窗口,但我不知道如何隔离范围。我的目标是有一个模式窗口来添加一个新的位置。我希望该指令使用来自父范围的任何所需数据填充模态并处理保存按钮单击。我使用父作用域得到了这个工作,但我无法让它与隔离作用域一起工作。
父控制器有一个位置属性,在这种情况下,这是我需要的唯一父属性。 newLocation 对象应与父范围隔离。当我添加隔离范围时,不会填充名称输入,并且不会触发单击处理程序。范围声明只允许 @、= 和 & 属性,所以我不能在那里增加它,并且在链接中添加属性没有效果。
指令:
angular.module('pw').directive('addLocationModal', [
'appApi', function (appApi) {
return {
restrict: 'A',
scope: {
locations: '='
},
link: function (scope, element, attrs) {
scope.newLocation = {
name: 'xxx'
};
scope.saveLocation = function () {
alert('save location');
};
}
};
}
]);
模态:
<div class="modal fade" id="add-location-modal" add-location-modal>
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">
<span>×</span>
</button>
<h4 class="modal-title">Add Location</h4>
</div>
<div class="modal-body">
<div class="form-group">
<label>Name</label>
<input type="text" class="form-control" ng-model="newLocation.name" required />
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary" ng-click="saveLocation()">Save</button>
</div>
</div>
</div>
【问题讨论】:
-
可以提供jsfiddle或者plnkr吗?
-
如果你需要保持作用域隔离,你应该使用前缀 @ 传递初始值并使用前缀 & 让父作用域知道在保存功能上对位置所做的更改
-
我创建了一个 Plunker -- plnkr.co/edit/FxtSPHR3QFJOd0PTnMiI 但即使没有隔离范围,它也无法工作,我对此没有耐心。
-
摆脱 bootstrap.js 并使用
angular-ui-bootstrap会简单得多。无需重新发明轮子 -
有趣的项目,但我不想完全致力于 Angular。
标签: angularjs twitter-bootstrap