Почему ввод не заполняется начальным значением после добавления директивы парсера - PullRequest
0 голосов
/ 05 сентября 2018

У меня проблема с AngularJS 1.1.5, при первой загрузке ввод не заполнен начальным значением, это нормально для 1.2.x и выше. Я ограничен этой версией, так как это решение для бэкэнда Umbraco 7.9.2. Это пример использования директивы с $ parsers для проверки ввода на основе функции, определенной в контроллере. Подобные решения широко используются здесь при переполнении стека или здесь , чтобы избежать часов. Как заполнить начальное значение в этом сценарии?

HTML

<div ng-app="app">
   <div ng-controller="TitleWidget">
      <div class="help">
         <label id="TitleLabel" ng-model="model.value.combinedtitle">{{model.value.combinedtitle}}</label>
      </div>
      <input type="text" ng-model="model.value.title" myfunction="change" name="title" id="title"
        class="umb-editor umb-textstring textstring"
        val-server="value"
        ng-required="model.validation.mandatory"
        ng-trim="false"/>
      <span class="help-inline" val-msg-for="title" val-toggle-msg="valServer"></span>
      <span class="help-inline" val-msg-for="title" val-toggle-msg="required"><localize key="general_required">Required</localize></span>
      <div class="help" ng-if="model.maxlength">
         <strong>{{model.count}}</strong>
         <span>characters left</span>
      </div>
   </div>
</div>

и контроллер

angular.module('app',[])
.controller('TitleWidget', function ($q, $scope, $rootScope, $http, 
$cacheFactory) {

$scope.init = function () {

        if (!$scope.model) {
            $scope.model = {};
        }

        if (!$scope.model.value) {
            $scope.model.value = {};
            $scope.model.value.combinedtitle = [];
            $scope.model.value.title = [];
        }
    };  

$scope.init();
$scope.model.value.title= "title";
$scope.model.value.combinedtitle= "combinedtitle";
$scope.model.count= 0;

$scope.change = function (value, text) {
     $scope.model.value.combinedtitle = value + " combined " + text;
     $scope.model.count= 100 - $scope.model.value.combinedtitle.length;
     return true;

    };

}).directive('myfunction', function () {
    return {

        scope: {
            myfunction: '&myfunction'
        },
        require: 'ngModel',
        link: function ($scope, element, attrs, ctrl) {

            ctrl.$parsers.push(function (view) {

                var result = $scope.myfunction()(view, "from directive");
                if (!result) {
                    ctrl.$setValidity('maxlen', false);

                } else {
                    ctrl.$setValidity('maxlen', true);
                }

                return view;
            });
        }
    };
}); 

jsfiddle демонстрирует проблему здесь

...