Tôi đang cố gắng tạo một lệnh sẽ tạo một trường đầu vào có cùng mô hình ng với thành phần tạo ra lệnh đó.
Đây là những gì tôi nghĩ ra cho đến nay:
HTML
<!doctype html>
<html ng-app="plunker" >
<head>
<meta charset="utf-8">
<title>AngularJS Plunker</title>
<link rel="stylesheet" href="style.css">
<script>document.write("<base href=\"" + document.location + "\" />");</script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCtrl">
This scope value <input ng-model="name">
<my-directive ng-model="name"></my-directive>
</body>
</html>
JavaScript
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.name = "Felipe";
});
app.directive('myDirective', function($compile) {
return {
restrict: 'E',
scope: {
ngModel: '='
},
template: '<div class="some"><label for="{{id}}">{{label}}</label>' +
'<input id="{{id}}" ng-model="value"></div>',
replace: true,
require: 'ngModel',
link: function($scope, elem, attr, ctrl) {
$scope.label = attr.ngModel;
$scope.id = attr.ngModel;
console.debug(attr.ngModel);
console.debug($scope.$parent.$eval(attr.ngModel));
var textField = $('input', elem).
attr('ng-model', attr.ngModel).
val($scope.$parent.$eval(attr.ngModel));
$compile(textField)($scope.$parent);
}
};
});
Tuy nhiên, tôi không tự tin rằng đây là cách phù hợp để xử lý tình huống này và có một lỗi là điều khiển của tôi không được khởi tạo với giá trị của trường mục tiêu mô hình ng.
Đây là một Plunker của mã ở trên: http://plnkr.co/edit/IvrDbJ
Cách xử lý chính xác này là gì?
EDIT : Sau khi loại bỏ ng-model="value"
khỏi mẫu, điều này dường như đang hoạt động tốt. Tuy nhiên, tôi sẽ giữ câu hỏi này mở vì tôi muốn kiểm tra kỹ xem đây có phải là cách làm đúng hay không.
scope
và thiết lập nóscope: false
? Làm thế nào để liên kếtng-model
trong trường hợp đó?