我可以使用 Angular 将客户端行为注入 Umbraco 7 后台吗?
Can I inject a client-side behaviour into the Umbraco 7 back-office using Angular?
我正在使用自定义的 Umbraco 安装,我遇到了这样一种情况,当他们第一次点击某些类型的 'Publish' 按钮时,我需要 运行 一些额外的用户交互的内容。实际上,这将是弹出一个框,允许他们在将发布的内容共享到第三方服务时使用自定义消息。
虽然我很精通 Javascript,但我并没有花很多时间在 Angular 上,而且我所做的一切都相当直接。
在这种情况下,编辑器使用内置于 Umbraco 中的标准 Angular 控制器 - 理想的情况是挂接到其范围并在提交表单时添加事件处理程序,但我可以'弄清楚如何访问它,我怀疑它可能根本不可能。
我的 JavaScript 可以通过插件在页面中使用,但我 可以 直接访问涉及的表单元素,但我觉得这有潜力非常脆弱——特别容易受到 Umbraco 更新的影响——而且它 运行 与一般后台办公室的工作背道而驰。
Angular 或 Umbraco 是否提供了允许我执行此操作的任何内容?如果没有,插入此行为的最实用方法是什么?
正如您所说,做这种事情很容易在更新过程中中断。尽管使用 IContentService
事件不允许您显示模态客户端,但我建议您在应用程序启动期间在 IContentService.Saving
事件上注册一个偶数处理程序。
public class ApplicationStartup : ApplicationEventHandler
{
protected override void ApplicationStarting(UmbracoApplicationBase umbracoApplication,
ApplicationContext applicationContext)
{
ContentService.Saving += ApplicationEvents.ContentService_Saving;
base.ApplicationStarting(umbracoApplication, applicationContext);
}
internal static void ContentService_Saving(IContentService sender, SaveEventArgs<IContent> e)
{
if (e != null && e.SavedEntities.Any())
{
foreach (var entity in e.SavedEntities.Where(content=> content.ContentType.Alias == "something"))
{
}
}
}
}
我正在使用自定义的 Umbraco 安装,我遇到了这样一种情况,当他们第一次点击某些类型的 'Publish' 按钮时,我需要 运行 一些额外的用户交互的内容。实际上,这将是弹出一个框,允许他们在将发布的内容共享到第三方服务时使用自定义消息。
虽然我很精通 Javascript,但我并没有花很多时间在 Angular 上,而且我所做的一切都相当直接。
在这种情况下,编辑器使用内置于 Umbraco 中的标准 Angular 控制器 - 理想的情况是挂接到其范围并在提交表单时添加事件处理程序,但我可以'弄清楚如何访问它,我怀疑它可能根本不可能。
我的 JavaScript 可以通过插件在页面中使用,但我 可以 直接访问涉及的表单元素,但我觉得这有潜力非常脆弱——特别容易受到 Umbraco 更新的影响——而且它 运行 与一般后台办公室的工作背道而驰。
Angular 或 Umbraco 是否提供了允许我执行此操作的任何内容?如果没有,插入此行为的最实用方法是什么?
正如您所说,做这种事情很容易在更新过程中中断。尽管使用 IContentService
事件不允许您显示模态客户端,但我建议您在应用程序启动期间在 IContentService.Saving
事件上注册一个偶数处理程序。
public class ApplicationStartup : ApplicationEventHandler
{
protected override void ApplicationStarting(UmbracoApplicationBase umbracoApplication,
ApplicationContext applicationContext)
{
ContentService.Saving += ApplicationEvents.ContentService_Saving;
base.ApplicationStarting(umbracoApplication, applicationContext);
}
internal static void ContentService_Saving(IContentService sender, SaveEventArgs<IContent> e)
{
if (e != null && e.SavedEntities.Any())
{
foreach (var entity in e.SavedEntities.Where(content=> content.ContentType.Alias == "something"))
{
}
}
}
}