কৌণিক চলকটি মূল্যায়ন না করা পর্যন্ত অপেক্ষা করুন
আমার এটি নিয়ে প্রচুর পরিমাণে ঝাঁকুনি লেগেছে, এবং এটিকে "="
সুযোগের সাথে সংজ্ঞায়িত ভেরিয়েবলের সাথেও কাজ করতে পারা যায় না । আপনার পরিস্থিতির উপর নির্ভর করে এখানে তিনটি সমাধান's
সমাধান # 1
আমি দেখতে পেলাম যে চলকটি নির্দেশের কাছে পাঠানো হওয়ার পরেও কৌনিক দ্বারা মূল্যায়ন করা হয়নি । এর অর্থ হ'ল আপনি এটি অ্যাক্সেস করতে এবং টেমপ্লেটে এটি ব্যবহার করতে পারবেন তবে লিঙ্কের মধ্যে বা অ্যাপ্লিকেশন নিয়ামক ক্রিয়াকলাপটি না থাকলে যতক্ষণ না আমরা এটির মূল্যায়নের জন্য অপেক্ষা করি।
আপনার যদি পরিবর্তনশীল পরিবর্তন , অথবা একটি অনুরোধ মাধ্যমে সংগৃহীত হয়, তাহলে আপনি ব্যবহার করা উচিত $observe
বা $watch
:
app.directive('yourDirective', function () {
return {
restrict: 'A',
link: function (scope, element, attrs) {
attrs.$observe('yourDirective', function (value) {
if (value) {
console.log(value);
scope.variable = value;
}
});
},
controller: ['$scope', '$element', '$attrs',
function ($scope, $element, $attrs) {
$attrs.$observe('yourDirective', function (value) {
if (value) {
console.log(value);
$scope.variable = value;
}
});
}
]
};
})
.controller('MyCtrl', ['$scope', function ($scope) {
$scope.$watch('variable', function (value) {
if (value) {
console.log(value);
}
});
}]);
এবং এখানে এইচটিএমএল (বন্ধনীগুলি মনে রাখবেন!):
<div ng-controller="MyCtrl">
<div your-directive="{{ someObject.someVariable }}"></div>
<div ng-bind="variable"></div>
</div>
মনে রাখবেন যে আপনি "="
যদি $observe
ফাংশনটি ব্যবহার করে থাকেন তবে আপনার স্কোপটিতে ভেরিয়েবলটি সেট করা উচিত নয় । এছাড়াও, আমি দেখতে পেলাম যে এটি বস্তুগুলিকে স্ট্রিং হিসাবে পাস করে, সুতরাং যদি আপনি অবজেক্টগুলি পাস করেন তবে # 2 বা scope.$watch(attrs.yourDirective, fn)
(অথবা যদি আপনার পরিবর্তনশীল পরিবর্তন না হয় তবে # 3 ) সমাধান ব্যবহার করুন।
সমাধান # 2
যদি আপনার ভেরিয়েবলটি তৈরি করা হয় যেমন অন্য কোনও নিয়ামক , তবে অ্যাপ্লিকেশন নিয়ামককে প্রেরণের আগে কৌনিকটি এটির মূল্যায়ন না করা পর্যন্ত অপেক্ষা করা দরকার, আমরা চালানো $timeout
না হওয়া পর্যন্ত অপেক্ষা করতে পারি $apply
। এছাড়াও আমাদের $emit
এটি প্যারেন্ট স্কোপ অ্যাপ কন্ট্রোলারে প্রেরণের জন্য ব্যবহার করতে হবে (নির্দেশের বিচ্ছিন্ন সুযোগের কারণে):
app.directive('yourDirective', ['$timeout', function ($timeout) {
return {
restrict: 'A',
scope: {
yourDirective: '='
},
link: function (scope, element, attrs) {
$timeout(function(){
console.log(scope.yourDirective);
scope.$emit('notification', scope.yourDirective);
});
},
controller: [ '$scope', function ($scope) {
$timeout(function(){
console.log($scope.yourDirective);
$scope.$emit('notification', scope.yourDirective);
});
}]
};
}])
.controller('MyCtrl', ['$scope', function ($scope) {
$scope.$on('notification', function (evt, value) {
console.log(value);
$scope.variable = value;
});
}]);
এবং এখানে এইচটিএমএল (বন্ধনী নেই!):
<div ng-controller="MyCtrl">
<div your-directive="someObject.someVariable"></div>
<div ng-bind="variable"></div>
</div>
সমাধান # 3
যদি আপনার ভেরিয়েবল পরিবর্তন না হয় এবং আপনার এটির নির্দেশনায় আপনার মূল্যায়ন করতে হয় তবে আপনি $eval
ফাংশনটি ব্যবহার করতে পারেন :
app.directive('yourDirective', function () {
return {
restrict: 'A',
link: function (scope, element, attrs) {
scope.variable = scope.$eval(attrs.yourDirective);
console.log(scope.variable);
},
controller: ['$scope', '$element', '$attrs',
function ($scope, $element, $attrs) {
scope.variable = scope.$eval($attrs.yourDirective);
console.log($scope.variable);
}
]
};
})
.controller('MyCtrl', ['$scope', function ($scope) {
$scope.$watch('variable', function (value) {
if (value) {
console.log(value);
}
});
}]);
এবং এখানে এইচটিএমএল (বন্ধনীগুলি মনে রাখবেন!):
<div ng-controller="MyCtrl">
<div your-directive="{{ someObject.someVariable }}"></div>
<div ng-bind="variable"></div>
</div>
এছাড়াও, এই উত্তরটি একবার দেখুন: https://stackoverflow.com/a/12372494/1008519
FOUC (আনস্টাইলযুক্ত সামগ্রীর ফ্ল্যাশ) ইস্যুটির জন্য রেফারেন্স: http://deansofer.com/posts/view/14/AngularJs- টিপস- এবং- কৌশলগুলি- UPDATED
আগ্রহীদের জন্য: এখানে কৌণিক জীবন চক্র সম্পর্কিত একটি নিবন্ধ রয়েছে