Я использую ng-шаблон в angularjs
<script type="text/ng-template" id="ng-wig/views/ng-wig.html">
<div class="ng-wig">
........
</div>
<script>
и у меня есть текстовое поле, использующее этот ng-шаблон.
<textarea ng-wig="content" ng-model="contents"></textarea>
но эта ng-модель не может быть доступна внутри контроллера. пожалуйста помоги.
Когда вы загружаете свой шаблон textarea внутри ng-include
, если вы посмотрите на директиву ng-include
вы увидите, что он создает новую область, которая прототипически унаследована из родительской области.
Если вы используете какую-либо переменную области видимости, объявленную в контроллере, не будут доступны внутри div. Чтобы получить доступную переменную контроллера внутри ng-include
вы должны объявить ее как object
например $scope.model= {}
тогда вы должны объявить свойства в нем. как ng-mode="model.contents"
наценка
<textarea ng-wig="model.content" ng-model="model.contents"></textarea>
контроллер
$scope.model = {};
Здесь вы можете найти аналогичный ответ
Существует несколько подходов, кроме того, что вы можете решить эту проблему.
Другой способ был бы, вы могли бы использовать контроллер как подход таким образом, которого вы можете избежать. В этом вам нужно использовать this
внутри контроллера и использовать псевдоним контроллера, показывая переменную на html, например vm.contents
Makrup
<div ng-controller="myCtrl as vm">
<div ng-include="'ng-wig/views/ng-wig.html'"></div>
</div>
Textarea
<textarea ng-wig="content" ng-model="vm.contents"></textarea>
Также вы можете указать родительскую область ng-include
которая представляет собой не что иное, как область контроллера, просто делая $parent
в вашей ng-model
, в этом случае ваша ng-модель будет равна $parent.contents
Textarea
<textarea ng-wig="$parent.content" ng-model="$parent.contents"></textarea>
Заметка
Не используйте этот подход, используйте 1-й, что более предпочтительно.