निम्न कोड त्रुटि को फेंकता है "TypeError: जब मैं" चेक "बटन पर क्लिक करता हूं तो" अविश्वसनीय "संपत्ति '$ pristine' नहीं पढ़ सकता।
app.controller('MainCtrl', function($scope) {
// other stuff
})
.controller('Ctrl2', function($scope) {
$scope.product = {description:'pump'};
$scope.output = 'unknown';
// uncomment to avoid undefined error, still can't see $pristine
// $scope.formHolder = {};
$scope.checkForm = function() {
$scope.descriptionTest = $scope.product.description;
if ($scope.formHolder.productForm.$pristine) {
$scope.output = 'yes';
}
if ($scope.formHolder.productForm.$dirty) {
$scope.output = 'no'
}
}
});
एचटीएमएल
<body ng-controller="MainCtrl">
<div >
<ng-include ng-controller="Ctrl2" src="'myForm.html'"></ng-include>
</div>
</body>
myForm.html
<form name="productForm" novalidate>
<h2>myForm</h2>
description: <input type="text" name="description" ng-model="product.description"/>
<br>
<button ng-click="checkForm()">Check Form</button>
<br>
Form Pristine: {{output}}
<br><br>
I can see the description: {{descriptionTest}}
</form>
समस्या यह है कि मेरी Ctrl2 productForm नहीं देख सकता है। पहले तो मुझे लगा कि यह प्रोटोटाइप विरासत के साथ करना था कि एनजी-शामिल नहीं है जब यह एक बच्चे के दायरे में आता है, तो मैं Ctrl2 में एक चर जोड़ने की कोशिश की:
$scope.productForm = {};
यह त्रुटि से छुटकारा मिला, लेकिन मेरी नियंत्रक अभी भी $ pristine या $ गंदे सही ढंग से नहीं देख रहा था।
मैं अंत में यह productForm ऊपर एक $ scope.formHolder वस्तु जोड़कर काम कर गया:
.controller('Ctrl2', function($scope) {
$scope.product = {description:'pump'};
$scope.output = 'unknown';
// uncomment to avoid undefined error, still can't see $pristine
$scope.formHolder = {};
$scope.checkForm = function() {
$scope.descriptionTest = $scope.product.description;
if ($scope.formHolder.productForm.$pristine) {
$scope.output = 'yes';
}
if ($scope.formHolder.productForm.$dirty) {
$scope.output = 'no'
}
}
});
एचटीएमएल
<form name="formHolder.productForm" novalidate>
क्यों काम करता है? और क्या ऐसा करने का एक बेहतर तरीका है?
मैं इस तरह से समाप्त हुआ क्योंकि मेरे पास एक काम करने वाला फॉर्म & नियंत्रक/टेम्पलेट था जिसे मैं कहीं और पुन: उपयोग करना चाहता था। मुझे शायद निर्देश बनाना चाहिए, लेकिन सबकुछ ठीक से काम करता है और फॉर्म के $ गंदे फीचर्स को छोड़कर - सभी एनजी-मॉडल वर्र्स सही ढंग से पारित किए गए थे।
How can I set a form contained inside a ng-include to be prestine? का उत्तर है कि "सभी नियम तोड़ते हैं" लेकिन अधिक जटिल लग रहा था।
जब मैं लिखता हूं कि फॉर्म नियंत्रक कब दायरे में $ pristine जोड़ता है, और किस दायरे में?
संपादित करें/उत्तर:
मेरे मूल सवाल यह है कि प्रपत्र निर्देश गुंजाइश के लिए लिखते हैं के बारे में भ्रम की स्थिति के लिए नीचे उबला हुआ जा सकता है।
$scope.productForm = formObject;
तो: मैं धारणा है कि यह
<form name="productForm">...
में बात लेने के लिए और यह करने के लिए गुण जोड़ना होगा,
$scope.productForm.$pristine = function() {...}
तथापि की तरह था, यह productForm के शीर्ष पर सीधे लिखते हैं , फॉर्म ऑब्जेक्ट को बच्चे में संग्रहीत किया जाता है और माता-पिता को चयनित उत्तर में समझाया नहीं जाता है।
बच्चे की गुंजाइश विरासत में महत्वपूर्ण गड़बड़ी जिसने मेरी मदद की है कि श्रृंखला को पढ़ने में परामर्श दिया जाता है, लेकिन लिखना नहीं है। तो अगर आप बच्चे की तरह कुछ सेट करते हैं। MyThing।संपत्ति = '123', जबकि यह एक लिखने जैसा दिखता है, इसे पहले यह पता लगाने के लिए पढ़ना पड़ता है कि मेरा टिंग क्या है। जबकि childScope.myThing = '567' को सेट करना प्रत्यक्ष लेखन है, और इसमें मूल श्रृंखला को बिल्कुल शामिल नहीं करना शामिल है। यह सब बेहतर ढंग से समझाया गया है: What are the nuances of scope prototypal/prototypical inheritance in AngularJS?
AngularJS में के लिए
लिंक यह माध्यम से डॉट अंकन कहते हैं। – Walfrat