বিজ্ঞপ্তি: আমি আরও ভাল সমাধান খুঁজে পাওয়ায় আমি এই উত্তরটি আপডেট করি। ভবিষ্যতের রেফারেন্সের জন্য আমি পুরানো উত্তরগুলি ততক্ষণ রাখি যতক্ষণ তারা সম্পর্কিত থাকে। সর্বশেষ এবং সর্বোত্তম উত্তরটি প্রথম আসে।
উত্তম উত্তর:
কৌণিক নির্দেশাবলী খুব শক্তিশালী, তবে কোন প্রক্রিয়াগুলি তাদের পিছনে রয়েছে তা বোঝার জন্য এটি সময় নেয় takes
নির্দেশিকা তৈরি করার সময়, কৌণিকতা আপনাকে প্যারেন্ট স্কোপের সাথে কিছু বাঁধাই দিয়ে একটি বিচ্ছিন্ন সুযোগ তৈরি করতে দেয় । এই বাইন্ডিং দ্বারা নির্দিষ্ট অ্যাট্রিবিউট আপনি DOM মধ্যে উপাদান সংযুক্ত এবং কিভাবে আপনি সংজ্ঞায়িত সুযোগ সম্পত্তি নির্দেশ সংজ্ঞা বস্তুর ।
এখানে 3 ধরণের বাইন্ডিং অপশন রয়েছে যা আপনি সুযোগের মধ্যে সংজ্ঞা দিতে পারবেন এবং এগুলি উপসর্গ সম্পর্কিত বৈশিষ্ট্য হিসাবে লিখবেন।
angular.module("myApp", []).directive("myDirective", function () {
return {
restrict: "A",
scope: {
text: "@myText",
twoWayBind: "=myTwoWayBind",
oneWayBind: "&myOneWayBind"
}
};
}).controller("myController", function ($scope) {
$scope.foo = {name: "Umur"};
$scope.bar = "qwe";
});
এইচটিএমএল
<div ng-controller="myController">
<div my-directive my-text="hello {{ bar }}" my-two-way-bind="foo" my-one-way-bind="bar">
</div>
</div>
সেক্ষেত্রে, নির্দেশের সুযোগে (এটি লিঙ্কিং ফাংশন বা নিয়ামকের ক্ষেত্রে থাকুক না কেন), আমরা এই বৈশিষ্ট্যগুলিকে এইভাবে অ্যাক্সেস করতে পারি:
/* Directive scope */
in: $scope.text
out: "hello qwe"
// this would automatically update the changes of value in digest
// this is always string as dom attributes values are always strings
in: $scope.twoWayBind
out: {name:"Umur"}
// this would automatically update the changes of value in digest
// changes in this will be reflected in parent scope
// in directive's scope
in: $scope.twoWayBind.name = "John"
//in parent scope
in: $scope.foo.name
out: "John"
in: $scope.oneWayBind() // notice the function call, this binding is read only
out: "qwe"
// any changes here will not reflect in parent, as this only a getter .
"এখনও ঠিক আছে" উত্তর:
যেহেতু এই উত্তরটি গৃহীত হয়েছে, তবে কয়েকটি সমস্যা রয়েছে, তাই আমি এটি আরও ভাল একটিতে আপডেট করব। স্পষ্টতই, $parse
এমন একটি পরিষেবা যা বর্তমান সুযোগের বৈশিষ্ট্যগুলিতে থাকে না, যার অর্থ এটি কেবল কৌণিক অভিব্যক্তি গ্রহণ করে এবং স্কোপে পৌঁছতে পারে না।
{{
, }}
Angularjs সূচনা করার সময় এক্সপ্রেশনগুলি সংকলিত হয় যার অর্থ আমরা যখন আমাদের নির্দেশিকা postlink
পদ্ধতিতে এগুলি অ্যাক্সেস করার চেষ্টা করি তখন সেগুলি ইতিমধ্যে সংকলিত হয়। ( {{1+1}}
হয় 2
ইতিমধ্যে নির্দেশ মধ্যে)।
আপনি এইভাবে ব্যবহার করতে চান:
var myApp = angular.module('myApp',[]);
myApp.directive('myDirective', function ($parse) {
return function (scope, element, attr) {
element.val("value=" + $parse(attr.myDirective)(scope));
};
});
function MyCtrl($scope) {
$scope.aaa = 3432;
}
।
<div ng-controller="MyCtrl">
<input my-directive="123">
<input my-directive="1+1">
<input my-directive="'1+1'">
<input my-directive="aaa">
</div>
আপনার এখানে একটি জিনিস লক্ষ্য করা উচিত তা হল, আপনি যদি মানটির স্ট্রিং সেট করতে চান তবে আপনার এটি উদ্ধৃতিতে মোড়ানো উচিত। (তৃতীয় ইনপুট দেখুন)
এখানে খেলতে আসা ফ্রিডলটি: http://jsfiddle.net/neuTA/6/
পুরানো উত্তর:
আমার মতো ভ্রান্ত হতে পারে এমন লোকদের জন্য আমি এটি অপসারণ করছি না, মনে রাখবেন যে $eval
এটি করার সঠিক পদ্ধতিটি ব্যবহার করা পুরোপুরি সূক্ষ্ম, তবে $parse
ভিন্ন আচরণ রয়েছে, বেশিরভাগ ক্ষেত্রে আপনার সম্ভবত এটি ব্যবহার করার প্রয়োজন হবে না।
এটি করার উপায়টি আবারও ব্যবহার করা scope.$eval
। এটি কেবল কৌণিক অভিব্যক্তি সংকলন করে না, এটি বর্তমান স্কোপ এর বৈশিষ্ট্যগুলিতে অ্যাক্সেস করে।
var myApp = angular.module('myApp',[]);
myApp.directive('myDirective', function () {
return function (scope, element, attr) {
element.val("value = "+ scope.$eval(attr.value));
}
});
function MyCtrl($scope) {
}
আপনি যা মিস করছেন তা ছিল $eval
।
http://docs.angularjs.org/api/ng.$rootScope.Scope#$eval
ফলাফলটি ফিরিয়ে দেওয়ার বর্তমান সুযোগে অভিব্যক্তি কার্যকর করে। অভিব্যক্তিতে কোনও ব্যতিক্রম প্রচার করা হয় (অপরিবর্তিত)। কৌণিক অভিব্যক্তি মূল্যায়নের সময় এটি দরকারী।