2017-02-16 10 views
0

У меня есть традиционное приложение asp.net, которое читает HTML-шаблон и отображает его внутри div-элемента управления. Использование bootstrap xeditable пользователь может редактировать определенные части шаблона (только текст). Этот шаблон позже используется для отправки писем. Эта функциональность работает нормально. Теперь я переписываю это приложение, используя AngularJs и WebApi. Я использую угловой маршрут для маршрутизации на разные страницы (простой html) приложения. Я могу загрузить шаблон с помощью директивы. теперь я хочу разрешить пользователю редактировать текст и сохранять полный шаблон, чтобы его можно было использовать позже для отправки электронной почты.Можно ли разрешить пользователю редактировать и сохранять html-шаблон в приложении angularjs

MyTemplate.html

<p>this is some text</p> 
<p>this is some more text</p> 
<p>this is some another text</p> 

Директива

myapp.directive("customDirective", function() { 
return { 
    templateUrl: 'MyTemplate.html' 
}; 
}); 

Notify.html

<div> 
<h2>{{message}}</h2> 
<input type="button" ng-click="Redirect()" value="Report" /> 
</div> 
<custom-directive></custom-directive> 

Я хочу, чтобы пользователь должен иметь возможность редактировать текст в MyTemplate.html и сохранить его как полный шаблон для последующего использования. Возможно ли это?

+1

Нет !! Насколько я знаю о кодировании, вы не можете обновлять статические файлы, –

+0

@SaurabhAgrawal - как я уже сказал, это уже происходит в приложении asp.net, которое работает нормально. Я хочу добиться того же в angularjs – Prabi

+0

да без использования db вы не можете это сделать –

ответ

2

Не храните его в файле. Сохраните шаблон в своей базе данных. Укажите здесь значение по умолчанию, поэтому что-то покажет, не изменил ли пользователь его.

В директиве вы загружаете шаблон из своей базы данных через свой API. После этого добавьте шаблон в содержимое своей директивы внутри функции обратного вызова ссылок и скомпилируйте директиву (при необходимости).

myapp.directive("customDirective", ($compile, yourService) => { 
    return { 
     link: (scope, elem) => { 
      yourService.fetchTemplate().then(template => { 
       elem.html(template); 
       $compile(elem.contents())(scope); 
      }); 
     } 
    } 
}); 

Пожалуйста, убедитесь, что вы правильно дезактивировали свои данные. Это может быть довольно опасный шаблон для инъекций и компиляции, созданный пользователем.

Надеюсь, это указывает на то, что вы в правильном направлении.

Редактировать

Вы не могли бы событие нужно шаг $ компиляции. Это зависит от того, какой шаблон вы имеете в виду. Если это простой элемент без какой-либо связи с угловым, просто пропустите строку $ compile.

Edit 2 - Отображение шаблона на клик

Пожалуйста, обратите внимание на следующее только очень упрощенная версия, но она должна направить вас в правильном направлении.

В вашем родительском контроллере

$scope.state = { 
    displayTemplate: false 
}; 

В шаблоне

<my-template-directive ng-if="state.displayTemplate"></my-template-directive> 
<button ng-click="state.displayTemplate = true">Show Template</button> 
+0

Отличный человек !! Вы сделали мою пятницу! застрял на этом в течение последних двух дней. Я прекрасно работаю. Не могли бы вы ответить на еще один вопрос? извините, я могу казаться глупым, но я новичок в угловых концепциях. Можно ли загрузить этот шаблон при нажатии кнопки? Если я сохраню его в директиве, он загружается в любом случае, когда страница загружается.Я хочу загрузить, только если пользователь хочет его загрузить. Кроме того, если вы также можете сказать мне, как я могу прочитать содержимое элемента при нажатии другой кнопки, это будет большой помощью. – Prabi

+0

Счастливые помочь. Посмотрите мое последнее изменение, чтобы увидеть, как реализовать кнопку. –

+0

работал как шарм :) Не могли бы вы помочь с сохранением части? Я попытался связать пользовательский элемент с помощью ng-model, а затем сохранить запись щелчка, но он не определен. Как прочитать html этого настраиваемого элемента для его сохранения? – Prabi