[javascript] $ एक वस्तु देखो



Answers

form ऑब्जेक्ट नहीं बदल रहा है, केवल name संपत्ति है

अद्यतन पहेली: http://jsfiddle.net/ReuA8/1/

function MyController($scope) {
$scope.form = {
    name: 'my name',
}

$scope.changeCount = 0;
$scope.$watch('form.name', function(newVal, oldVal){
    console.log('changed');
    $scope.changeCount++;
});
}
Question

मैं एक शब्दकोश में बदलावों के लिए देखना चाहता हूं, लेकिन किसी कारण से कॉलबैक को कॉल नहीं किया जाता है।

यहां एक नियंत्रक है जिसका मैं उपयोग करता हूं:

function MyController($scope) {
    $scope.form = {
        name: 'my name',
        surname: 'surname'
    }

    $scope.$watch('form', function(newVal, oldVal){
        console.log('changed');
    });
}

यहां बेवकूफ है: http://jsfiddle.net/Y8ByG/

मुझे उम्मीद है कि हर बार नाम या उपनाम बदल दिया गया है, लेकिन यह नहीं होता है।

ऐसा करने का सही तरीका क्या है?




आपको $ घड़ी में बदलाव करना होगा ....

function MyController($scope) {
    $scope.form = {
        name: 'my name',
    }

    $scope.$watch('form.name', function(newVal, oldVal){
        console.log('changed');
     
    });
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js"></script>
<div ng-app>
    <div ng-controller="MyController">
        <label>Name:</label> <input type="text" ng-model="form.name"/>
            
        <pre>
            {{ form }}
        </pre>
    </div>
</div>




आपका कोड क्यों काम नहीं करता है क्योंकि डिफ़ॉल्ट रूप से $watch संदर्भ जांच करता है। तो संक्षेप में यह सुनिश्चित करता है कि जिस वस्तु को पास किया गया है वह नई वस्तु है। लेकिन आपके मामले में आप केवल फॉर्म ऑब्जेक्ट की कुछ संपत्ति को संशोधित कर रहे हैं जो एक नया निर्माण नहीं कर रहा है। इसे काम करने के लिए आप तीसरे पैरामीटर के रूप में true हो सकते हैं।

$scope.$watch('form', function(newVal, oldVal){
    console.log('invoked');
}, true);

यह काम करेगा लेकिन आप $ watchCollection का उपयोग कर सकते हैं जो $ घड़ी के बाद अधिक कुशल होगा क्योंकि $watchCollection फॉर्म ऑब्जेक्ट पर उथले गुणों के लिए देखेगा। उदाहरण के लिए

$scope.$watchCollection('form', function (newVal, oldVal) {
    console.log(newVal, oldVal);
});



इसे इस्तेमाल करे:

function MyController($scope) {
    $scope.form = {
        name: 'my name',
        surname: 'surname'
    }

    function track(newValue, oldValue, scope) {
        console.log('changed');
    };

    $scope.$watch('form.name', track);
}





Related