【发布时间】:2015-05-01 07:38:25
【问题描述】:
我有一个自定义元素指令(显示用户的图片和名称),它可以采用许多不同的配置属性。 uc-on-hover 属性可以采用一个函数来确定当用户将鼠标悬停在 DOM 元素上时要显示的元素。目前,该函数的逻辑位于 $rootScope (在角度服务中定义)。指令逻辑执行$eval(attr['ucOnHover']) 以在$rootScope 上执行函数。虽然这种模式暂时运作良好,但我担心它太复杂并且 $rootScope 会变得笨拙。无论如何我可以改变解决方案设计,同时仍然注意指令和服务的关注点分离并制定灵活的解决方案?
我在视图上下文中的自定义元素指令:
<user-card locator="{{ Item.Author }}" uc-on-hover="$root.namespace.displayFloatingContainer()"></user-card>
定义$rootScope.namespace.displayFloatingContainer()的服务:
.service('uiElementService', ['$rootScope', function ($rootScope) {
$rootScope.ngRestForm.displayFloatingContainer = function (code) {
try {
console.log('rootscope.uielementservice hit with code: ' + code);
return true;
} catch (err) {
}
return false;
};
}])
.run(function (uiElementService) {
console.log('uiElementService: Start');
});
指令通过以下方式调用 $rootScope 上的函数:
$scope.$eval(attrs["ucOnHover"]);
对此设计的任何帮助将不胜感激。
【问题讨论】:
-
$scope.$apply(attrs['ucOnHover']); ?
-
user-card指令是否使用隔离作用域? -
是的,
user-card指令使用隔离范围。 -
我尝试了@Baszz 建议并收到错误:[$rootScope:inprog] $digest 已经在进行中,仅使用 $scope.$eval(attrs['ucOnHover']) 时不会发生这种情况
标签: javascript angularjs angularjs-directive rootscope