TL; TR; ниже
Я имею дело с огромным приложением, где все делается супер-родовым, чтобы легко расходуть. Одним из компонентов является диалог. Теперь перед вашим ответом используйте ngInclude
или угловые шаблоны, позвольте мне объяснить, как они работают и почему мы хотели бы придерживаться их.
Поток создания этого диалога:
- Где-то в JavaScript Javascript функция вызывается.
- Это конструкция контейнера для диалога. Положение, ширина, высота, серый фон и т. Д.
- После этого появится индикатор загрузки, тогда как запрос GET будет иметь место на заднем конце.
- В фокусе Action указано имя представления и модель.
Этот вид (файл .cshtml) загружается в построитель строк. Чтобы дать вам представление о том, что происходит, вот фрагмент кода, в который загружается представление.
var sb = new StringBuilder(1); using (StringWriter sw = new StringWriter(sb)) { ..... var helper = new HtmlHelper(viewContext, viewDataContainer); using (helper.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" })) { helper.RenderPartial(viewName, model); } return sb.ToString(); }
Затем возвращается строка, в JavaScript в конце концов будет установлен как HTML:
diag.html(jsonResponse.data);
Теперь вид, что я загружаю, содержит угловые элементы, такие как ng-controller
и скобки, чтобы показать что-то из этот контроллер. Вот .cshtml:
@model int
<div ng-controller="dialogGridColumnSelectionController as dgc" ng-init="dgc.init(@Model)">
<table>
<thead>
...
<tbody>
<tr ng-repeat="col in dgc.tableColumns">
<td>
<input type="checkbox" name="some" ng-value="dgc.hide"/>
</td>
<td>{{col.headerName}}</td>
<td>{{col.Description}}</td>
</tr>
</tbody>
</table>
</div>
Несколько заявлений:
ng-app
был осужден, позже, он не должен быть нужен здесь, потому что<body>
элемент уже есть это.- Диалог находится в пределах
<body>
. - Ошибок нет, никаких угловых предупреждений.
{{col.headerName}}
показывает точно, как это показано, поэтому угловой не работает.- Контроллер и все остальные необходимые файлы javascript уже загружены на страницу, с которой открывается это диалоговое окно. Также попытался добавить их здесь, никакой разницы. Я также попытался снова загрузить углы, что дает мне предупреждение, что я
tried to load it more than once
. Итак, скрипты есть.
Теперь я сомневаюсь, что это сработает с самого начала, но я просто хочу убедиться, прежде чем мы начнем серьезную доработку диалогов.
Так что мой вопрос: возможно ли это? Может ли представление, инициированное с .html()
(в javascript), иметь угловое? Как я могу начать «Угловое»? Или почему это не работает с сгенерированным html?
TL, TR и EDIT:
После некоторого копания, я в конце концов сделал это:
dialog.html(jsonResponse.data);//dialog is a created jquery element, jsonResponse.data contains the `.cshtml` content
if (options.angularCompile && options.angularScope) {//I've set them in options
options.angularCompile(dialog)(options.angularScope);//= $compile(dialog)($scope) or $compile(dialog.contents())($scope)
}
Из выше HTML, он делает огонь функцию init
. Эта функция корректно загружает данные (с других заводов).
var self = this;
this.tablePageID = 0;
this.tableColumns = [];
$scope.hello = "hii";
this.init = function (tablePageID) {
self.tablePageID = tablePageID;
self.tableColumns = gridTableFactory.getTableColumns(tablePageID);
}
Но после того, как он был завершен и отображается диалог, он все еще не имеет угловой обработки.
Стоит отметить, что ng-repeat
сделал это задание в начале, нет никаких элементов. Похоже, он компилируется и забывается.
использовать компиляцию $ перед добавлением html. И постарайтесь сузить свой вопрос - 99% вопросов должны быть связаны с бэкэнд или интерфейсом, а не с обоими. –
В конце концов мой вопрос касается передней части. Угловое не доступно в этой части кода, но завтра я его взломаю и посмотрю, поможет ли это. – CularBytes
Я использовал компиляцию $, кажется, работает с первого взгляда. Он компилирует, выполняет некоторый код контроллера, успешно использует инжекционные заводы. Но когда диалог открыт, показывается простой html. угловые скобки продолжают появляться. Это вроде работает и забывает. – CularBytes