【发布时间】:2013-05-08 01:45:03
【问题描述】:
这是一个 AngularJS 应用程序。我有一个依赖于服务的自定义指令。
我真正好奇的是处理影响模型和 DOM 的用户操作的“角度方式”。一些示例代码:
HTML:
<form foo-places>
<!--other stuff -->
<span ng-repeat="place in places">
<button ng-click="removePlace(place)">remove {{place}}</button>
</span>
</form>
JS:
angular.module('foo.directives', []).directive('fooPlaces',
function(placesService) {
return {
controller : function($scope) {
$scope.places = placesService.places;
$scope.removePlace = function(name) {
placesService.removePlace(name);
};
$scope.$on('placesChanged', function() {
$scope.places = placesService.places;
});
},
link : function($scope, element, attrs) {
//code to do stuff when user removes a place
}
}
})
当用户删除一个地方(通过点击一个按钮)时,我还需要做一些事情来弄乱 DOM,例如,将窗口滚动到顶部等。在控制器中有一个功能感觉很奇怪处理模型,然后处理 DOM 的指令中的另一个函数......但两者都基于相同的用户操作。
我是在想这件事还是真的错过了什么?我应该如何处理同时处理模型和 DOM 的单个用户操作?
【问题讨论】:
-
您可以有一个单独的指令来处理在您的地点集合上使用
scope.$watch的 UI 更改。这样,您可以针对该集合的任何更改普遍更新 UI,只需将该指令添加到适合您正在操作的范围的标记元素。我已经这样做了两种方式,我认为添加手表比混合更干净使用链接函数中的 jQuery 或其他 dom 操作内容更改模型。 -
@Sounten - 我不知道我是否同意按照您的建议添加 $watch 更清洁。但我所知道的是,除了基本示例之外,我对 angularjs 的看法并不总是与做真实事情的最佳方式相匹配!感谢您的输入。我会玩这个。
标签: dom model angularjs controller directive