我有此指令:
app.directive("saveButton", ($rootScope, ConfirmationModal) => {
return {
templateUrl: "/structure/header/components/save-button/save-button.html",
scope: true,
link: function($scope, element, attrs) {
$scope.ConfirmationModal = ConfirmationModal;
}
}
});
我有指令的以下HTML模板:
<button ng-click="ConfirmationModal.default()">
Click here
</button>
以上操作正常,但请注意,在指令JS文件中
我已将服务附加到范围:$scope.ConfirmationModal = ConfirmationModal;
。
我的问题是,是否可以在没有附件的情况下使服务可用?
答案 0 :(得分:1)
首先,我认为您真的不应该直接使用服务。我认为有角度的方式更像是在控制器/组件内部使用服务。
简单答案为否。没有附件就无法提供服务。但是,假设您需要直接使用它,因此,是的,您需要将其绑定到作用域。就像您已经在这里所做的一样。
但是,如果您真的不想在这里绑定它,则不能在父控制器/组件中绑定它。默认情况下,指令是继承父$ scope的,因此您可以在父对象中绑定一次,所有在此父(控制器或组件)内部的'saveButton'指令也将拥有它。
PageURL := APEX_UTIL.PREPARE_URL(p_url => 'f?p=' || AppId || ':' || PageAlias || ':' || SessionId ||'::NO::' || Arguments || ':' || ArgumentValues, p_checksum_type => Checksum);
此外,您可以将特定范围变量传递给指令,如下所示:
angular.module('docsIsolateScopeDirective', [])
.controller('ParentController', ['$scope','ConfirmationModal' function($scope, ConfirmationModal) {
$scope.ConfirmationModal = ConfirmationModal;
}])
.directive('myCustomer', function() {
return {
templateUrl: '/structure/header/components/save-button/save-button.html'
};
});
然后您从父母那里传递了
scope: {
ConfirmationModal: '=ConfirmationModal'
},
所以总的来说,我建议在这里使用component over指令,因为它是'statefull',这将更加方便。然后在组件控制器内部使用Service。并使用诸如commit()函数之类的内容并在控制器内部调用服务,并仅绑定此提交的作用域。
希望有帮助, 干杯。