2016-11-22 11 views
0

私は苦労し、周りのどこにでもグーグルとこのディレクティブは私のコントローラの$スコープ値を更新しない理由を私は想像することはできませんされてきた: 指令:角度1.5.8入力カスタムディレクティブNG-モデル

app.directive('ingFormField', function() { 
    return { 
     restrict: "E", 
     scope: { 
      value: "=", 
      fieldName: "@", 
      fieldLabel: "@" 
     }, 
     div class="form-group">'+ 
      ' <label for="{{fieldName}}" class="control-label">{{fieldLabel}}:</label>'+ 
      ' <input ng-model="value" class="form-control" type="text" name="{{fieldName}}" id="{{fieldName}}" />' + 
     '</div>' 
    }; 
}); 

はHTMLで使用される:私のコントローラから

<ing-form-field field-name="Order" field-label="Order" ng-model="lateral.Order"></ing-form-field> 

そして、私のオブジェクト "横":

$scope.lateral = {Order: "01", Name: "Person"} 

私はいくつかの関数をStackOverflowから、同じ出力でコントローラ$ scopeの値を更新するためのリンク関数の使用について試しました。$ scopeからディレクティブへの値は機能していますが、ディレクティブの入力フィールドの変更は$スコープオブジェクト "外側"

+0

あなたはこのディレクティブを配置するHTML親のコードを追加することができます。 – alphapilgrim

答えて

0

これは直接ngModelパラメータを使用して、代替aproachを持っており、あなたのテンプレートを通してそれを渡すかもしれません。 ngModelを使用すると、テンプレートに名前を付けることの一貫性を保つのに役立ちます。

たとえば、ngModelディレクティブを使用してディレクティブテンプレートを使用する場合は、ディレクティブスコープから呼び出すことができ、モデルを親コントローラに反映させることができます。

次のコードはこのソリューションを実装していますが、これがソリューションの1つであることに注意してください。

angular 
 
    .module('myApp', []) 
 
    .directive('ingFormField', function() { 
 
    return { 
 
     restrict: "E", 
 
     scope: { 
 
     ngModel: "=", 
 
     fieldName: "@", 
 
     fieldLabel: "@" 
 
     }, 
 
     template: '<div class="form-group">' + 
 
     ' <label for="{{fieldName}}" class="control-label">{{fieldLabel}}:</label>' + 
 
     ' <input ng-model="ngModel" class="form-control" type="text" name="{{fieldName}}" id="{{fieldName}}" />' + 
 
     '</div>' 
 
    }; 
 
    }) 
 
    .controller('myController', function($scope) { 
 
    $scope.lateral = { 
 
     Order: "01", 
 
     Name: "Person" 
 
    } 
 
    }); 
 

 
angular.element(document).ready(function() { 
 
    angular.bootstrap(document, ['myApp']); 
 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular.min.js"></script> 
 

 
<div ng-controller="myController"> 
 
    <ing-form-field field-name="Order" field-label="Order" ng-model="lateral.Order"> 
 
    </ing-form-field> 
 

 
    <pre>{{ lateral | json }}</pre> 
 

 
</div>

0

あなたは非常に近いです。私はあなたが値を設定したスコープ付きプロパティの代わりにngModelを使って値を設定/渡そうとしている可能性があると思います。それは私が正しく理解している場合です。私がいつでも更新することができれば、これが助けてくれたら教えてください。

function exampleController($scope) { 
 
    $scope.lateral = { 
 
    Order: "01", 
 
    Name: "Person" 
 
    }; 
 
} 
 

 
function ingFormField() { 
 
    return { 
 
    restrict: "E", 
 
    scope: { 
 
     value: "=", 
 
     fieldName: "@", 
 
     fieldLabel: "@" 
 
    }, 
 
    template: '<div class="form-group"> ' + 
 
     ' <label for="{{fieldName}}" class="control-label">{{fieldLabel}}:</label>' + 
 
     ' <input ng-model="value" class="form-control" type="text" name="{{fieldName}}" id="{{fieldName}}" />' + 
 
     '</div>' 
 
    }; 
 
} 
 

 
angular 
 
    .module('example', []) 
 
    .controller('exampleController', exampleController) 
 
    .directive('ingFormField', ingFormField);
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular.min.js"></script> 
 
<div class="container-fluid" ng-app="example"> 
 
    <div class="container" ng-controller="exampleController"> 
 
    <ing-form-field field-name="Order" field-label="Order" value="lateral.Order"></ing-form-field> 
 

 
    </div> 
 
</div>

関連する問題