মার্কআপে কৌণিক স্কোপ ভেরিয়েবল সেট করুন


97

সাধারণ প্রশ্ন: আমি কীভাবে এইচটিএমএল এ স্কোপ মান সেট করতে পারি, আমার নিয়ামক দ্বারা পড়া?

var app = angular.module('app', []);

app.controller('MyController', function($scope) {
  console.log($scope.myVar);
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app='app'>
  <div ng-controller="MyController" app-myVar="test">
    {{myVar}}
  </div>
</div>

জেএসফিডাল: http://jsfiddle.net/ncapito/YdQcX/


এটি পরিচালনা করার জন্য কোনও নির্দেশিকা তৈরি করা আপনি আরও ভাল। একটি নির্দেশটি এনক্যাপসুলেট করতে পারে: প্যারামিটার (গুলি), এই নির্দেশনার জন্য নির্দিষ্ট একটি নিয়ামক এবং 'মাইম্যাপ' মার্কআপের জন্য একটি টেম্পলেট।
ইয়ান মেরার

আসলে আমি কী করেছি ... নির্দেশক নিয়ামকটিতে $ স্কোপ.মাইভিয়ার অ্যাক্সেস নিয়ে কিছু সমস্যা আছে। স্কোপ ভেরিয়েবলগুলি অ্যাক্সেস করার জন্য কেন আমাকে নিয়ামকের একটি ঘড়ি ব্যবহার করতে হবে?
নিক্স

4
আপনি আপনার নির্দেশ পোস্ট করতে পারে? কটাক্ষপাত "বুঝতে ট্রান্সক্লুশন এবং সুযোগগুলি" এখানে docs.angularjs.org/guide/directive {myVar: '='} আপনি সম্ভবত প্রয়োজন পরিধি ও বলব my-var="foo"যখন আপনি এটি কল। হাইফেন বনাম উট কেস এর নোট ব্যবহার। দ্রষ্টব্য: fooএখানে মূল্যায়ন করা হয় , আপনি যদি বিশদটির মান অ্যাক্সেস করতে সুযোগের সংজ্ঞাটিতে '@' ব্যবহার করতে চান না।
ইয়ান মেরার

4
@ নিক্স আপনি কি ব্যাখ্যা করতে পারবেন যে আপনার নিয়ামকের চেয়ে মানটি কেন ভিউতে শুরু করা দরকার? আমি ধরে নিয়েছি আপনি ইতিমধ্যে জানেন যে এটি মানগুলি আরম্ভ করার প্রচলিত উপায় নয় (অন্যথায় আপনি জিজ্ঞাসা করবেন না), এবং অন্যরা আপনার ব্যবহারের ক্ষেত্রে আরও ভাল বুঝতে পারলে আপনাকে আরও ভাল উত্তর দিতে সক্ষম হবে।
শিম দ্য বিয়ান

4
@ সিনিথবিয়ান আমি অল্প বয়স্ক এবং বোকা ...;) আমার এটি করার দরকার নেই কেন। আমি সম্ভবত কিছু প্রায় হ্যাক করার চেষ্টা করছিলাম।
নিক্স

উত্তর:


139

ng-initআপনি যখন লুপের ভিতরে ভেরিয়েবল বরাদ্দ করেন তখন কাজ করে না। ব্যবহার {{myVariable=whatever;""}}

চিহ্ন ""কৌণিক অভিব্যক্তি কোনো টেক্সট মূল্যায়ন হচ্ছে স্টপ।

তারপরে আপনি কেবল {{myVariable}}নিজের ভেরিয়েবলের মান আউটপুট করতে পারেন ।

একাধিক নেস্টেড অ্যারেগুলিকে পুনরাবৃত্তি করার সময় আমি এটিকে খুব দরকারী বলে মনে করেছি এবং আমি আমার বর্তমান পুনরাবৃত্তির তথ্য একাধিক বার জিজ্ঞাসা না করে এক পরিবর্তনশীলতে রাখতে চেয়েছিলাম।


4
যদিও এটি কাজ করে, এটি হ্যাকি মনে হয়। এটি হ'ল সাধারণত {{}}একক ভেরিয়েবল আউটপুট করার জন্য ব্যবহার করা ভাল অভ্যাস , ভেরিয়েবল বরাদ্দের জন্য নয়। আমি বলতে চাই স্ট্যাকওভারফ্লো.com/a/16799763/814160 আরও সঠিক (দেখুন জেএস কোড কম)।
শিম দ্য বিয়ান

4
@ সান্থিবিনের জন্য +1 - আমি এটি পরীক্ষা করেছি। শিশু নিয়ন্ত্রণকারীদের সাথে সমস্যা এবং মার্কআপে ভেরিয়েবল নির্ধারণের সুযোগ রয়েছে বলে মনে হয়। নির্দেশটি আমার উদ্দেশ্যে কাজ করে এবং একটি কঠিন সমাধান বলে মনে হয়।
পল কার্লটন

4
এটি কৌনিক 2/4 এ কাজ করছে বলে মনে হচ্ছে না - বাইন্ডিংগুলিতে অ্যাসাইনমেন্ট থাকতে পারে না
ডেমোডাভ

4
@ ডেমোডেভে আপনার পরিবর্তে টাইপসক্রিপ্ট কোডে আপনার সমস্ত নিয়ামক ভেরিয়েবল সেট করা উচিত এবং কেবলমাত্র টাইপস্ক্রিপ্টকে এইচটিএমএলে সংযুক্ত করতে টেম্পলেটটি ব্যবহার করা উচিত। টেমপ্লেটটি ভেরিয়েবল বরাদ্দ করা উচিত নয়।
বক্সমাইন

81

ngInit ভেরিয়েবল আরম্ভ করতে সহায়তা করতে পারে।

<div ng-app='app'>
    <div ng-controller="MyController" ng-init="myVar='test'">
        {{myVar}}
    </div>
</div>

jsfiddle উদাহরণ


4
এটি লক্ষ্য করা উচিত যে তারা আসল অ্যাপ্লিকেশনগুলির জন্য এই সমাধানটি সুপারিশ করে না (তবে সত্যিই কোনও বিকল্প প্রস্তাব দেবে না): ডকস.আঙ্গুলারজেস.আর.গাইড
মাইক রবিনসন

এটি আমার পক্ষে কাজ করেছে, তবে প্রথমে পরিবর্তনশীলটি এখনও নিয়ামকের মধ্যে অপরিবর্তিত ছিল। আমি একটি সামান্য বিরতি লুপ করেছি: var বিরতি = setInterval (ফাংশন () {যদি ($ স্কোপ.ওয়েস) {// ডুস্টফ ক্লিয়ারইন্টারভাল (অন্তর);}}, 10);
রোলেলার

19

যার myVarসাথে ডাকা একটি নির্দেশিকা তৈরি করুন

scope : { myVar: '@' }

এবং এটিকে কল করুন:

<div name="my_map" my-var="Richmond,VA">

হাইফেনেটেড ট্যাগ নামের নির্দেশে বিশেষত উটের মামলার রেফারেন্সটি নোট করুন।

আরও তথ্যের জন্য এখানে "ট্রান্সকোলেশন এবং স্কোপগুলি বোঝার" দেখুন: - http://docs.angularjs.org/guide/directive

এখানে একটি ফিডল দেখানো হয়েছে যে আপনি কীভাবে কোনও নির্দেশিকার মধ্যে বিভিন্ন উপায়ে স্ক্রিপ ভেরিয়েবলগুলিতে মানগুলি অনুলিপি করতে পারবেন।


আমি একাধিক করতে সক্ষম হতে চাই var-nick='my' var-nick2='test'। যদি না আপনি কেবলমাত্র নির্দেশাবলীর সাথে এটি প্রয়োগ করার কোনও উপায় সম্পর্কে ভাবতে না পারেনng-init
নিক্স

আপনি সুযোগটিতে একাধিক বৈশিষ্ট্য অন্তর্ভুক্ত করতে পারেন, কেবলমাত্র আপনার প্রয়োজনের একটি হ'ল আপনি যে নির্দেশনাটি কার্যকর করতে চান তার নাম হ'ল (বা সেই নির্দেশিকাটির নামটি এইচটিএমএল-তেও অন্তর্ভুক্ত করুন)। scope: {varNick: '@', varNick2: '@'}
ইয়ান মেরার

কিন্তু এটি স্কেলেবল নয়? আমাকে ভেরিয়েবলের জন্য একটি নির্দেশিকা নির্ধারণ করতে হবে?
নিক্স

না, আপনার প্রতি ভেরিয়েবলের দিকনির্দেশনা প্রয়োজন। উত্তরটি আমি যুক্ত করেছিলাম এমন ঝাঁকুনিটি একবার দেখুন।
ইয়ান মেরার

দুঃখিত আমি পড়তে মিস করি, আপনার উদাহরণটি নিখুঁত, আমার একমাত্র পরিবর্তন ছিল সুযোগ {'@': '@ "}।
নিক্স

10

আপনি এইচটিএমএল থেকে মান সেট করতে পারেন। আমি এখনও কৌনিক থেকে সরাসরি সমাধান আছে বলে মনে করি না।

 <div style="visibility: hidden;">{{activeTitle='home'}}</div>

7
চমৎকার হ্যাক ... তবে সুপারিশ করবে <div style="display: none">
রজার

3

আপনি ng-initনীচের প্রদর্শিত হিসাবে ব্যবহার করতে পারেন

<div class="TotalForm">
  <label>B/W Print Total</label>
  <div ng-init="{{BWCount=(oMachineAccounts|sumByKey:'BWCOUNT')}}">{{BWCount}}</div>
</div>
<div class="TotalForm">
  <label>Color Print Total</label>
  <div ng-init="{{ColorCount=(oMachineAccounts|sumByKey:'COLORCOUNT')}}">{{ColorCount}}</div>
</div>

এবং তারপরে অন্যান্য বিভাগে স্থানীয় স্কোপ ভেরিয়েবল ব্যবহার করুন:

<div>Total: BW: {{BWCount}}</div>
<div>Total: COLOR: {{ColorCount}}</div>

আমি এই পদ্ধতির পছন্দ করি; কম মনে হচ্ছে। যদিও একটি স্পষ্টতা, এনজি-থ্রির জন্য কোঁকড়া ধনুর্বন্ধনী প্রয়োজন।
mklbtz

1
$scope.$watch('myVar', function (newValue, oldValue) {
        if (typeof (newValue) !== 'undefined') {
            $scope.someothervar= newValue;
//or get some data
            getData();
        }


    }, true);

পরিবর্তনশীল কন্ট্রোলারের পরে আরম্ভ করে যাতে আপনার এটির উপরে নজর রাখা উচিত এবং কখন এটি ব্যবহারটি আরম্ভ করা হবে না।


0

আমি উত্তরটি পছন্দ করি তবে আমি মনে করি এটি আরও ভাল হবে যে আপনি একটি বিশ্বব্যাপী স্কোপ ফাংশন তৈরি করুন যা আপনাকে স্কোপ ভেরিয়েবলটি সেট করার অনুমতি দেবে।

সুতরাং গ্লোবালকন্ট্রোলারে তৈরি করুন

$scope.setScopeVariable = function(variable, value){
    $scope[variable] = value;
}

এবং তারপরে আপনার এইচটিএমএল ফাইলটিতে এটি কল করুন

{{setScopeVariable('myVar', 'whatever')}}

এরপরে আপনাকে আপনার নিজ নিজ নিয়ন্ত্রকটিতে স্কোপ.মাইভর ব্যবহারের অনুমতি দেওয়া হবে


0

আপনি যদি কোনও লুপ না রাখেন তবে আপনি এনজি-থিম ব্যবহার করতে পারেন অন্যটি ব্যবহার করতে পারেন

{{var=foo;""}}

"" আপনার বার প্রদর্শন করে না ows

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.