শিশু নিয়ামক থেকে AngularJS অ্যাক্সেস পিতামাতার সুযোগ




angularjs-scope (6)

আপনার এইচটিএমএল নীচের মত যদি আপনি এই মত কিছু করতে পারে:

<div ng-controller="ParentCtrl">
    <div ng-controller="ChildCtrl">
    </div>
</div>

তারপরে আপনি নিম্নরূপ পিতামাতার সুযোগ অ্যাক্সেস করতে পারেন

function ParentCtrl($scope) {
    $scope.cities = ["NY", "Amsterdam", "Barcelona"];
}

function ChildCtrl($scope) {
    $scope.parentcities = $scope.$parent.cities;
}

আপনি যদি আপনার মতামত থেকে কোনো অভিভাবক নিয়ন্ত্রক অ্যাক্সেস করতে চান তবে আপনাকে এটি এমন কিছু করতে হবে:

<div ng-controller="xyzController as vm">
   {{$parent.property}}
</div>

জেসফিল্ড দেখুন: http://jsfiddle.net/2r728/

হালনাগাদ

প্রকৃতপক্ষে আপনি অভিভাবক নিয়ামক cities সংজ্ঞায়িত আপনার সন্তানের নিয়ামক সব সুযোগ ভেরিয়েবল উত্তরাধিকারী হবে। তাই তাত্ত্বিকভাবে আপনি $parent কল করতে হবে না। নিম্নোক্ত উদাহরণটি নিম্নরূপ লেখা যেতে পারে:

function ParentCtrl($scope) {
    $scope.cities = ["NY","Amsterdam","Barcelona"];
}

function ChildCtrl($scope) {
    $scope.parentCities = $scope.cities;
}

AngularJS ডক্স এই পদ্ধতি ব্যবহার করে, here আপনি $scope সম্পর্কে আরও পড়তে পারেন।

আরেকটি আপডেট

আমি এই মূল পোস্টার একটি ভাল উত্তর মনে হয়।

এইচটিএমএল

<div ng-app ng-controller="ParentCtrl as pc">
    <div ng-controller="ChildCtrl as cc">
        <pre>{{cc.parentCities | json}}</pre>
        <pre>{{pc.cities | json}}</pre>
    </div>
</div>

জাতীয়

function ParentCtrl() {
    var vm = this;
    vm.cities = ["NY", "Amsterdam", "Barcelona"];
}

function ChildCtrl() {
    var vm = this;
    ParentCtrl.apply(vm, arguments); // Inherit parent control

    vm.parentCities = vm.cities;
}

যদি আপনি controller as পদ্ধতি ব্যবহার করেন তবে আপনি নিম্নরূপ পিতামাতার সুযোগটি অ্যাক্সেস করতে পারেন

function ChildCtrl($scope) {
    var vm = this;
    vm.parentCities = $scope.pc.cities; // note pc is a reference to the "ParentCtrl as pc"
}

আপনি দেখতে পারেন যে $scopes অ্যাক্সেসে অনেকগুলি ভিন্ন উপায় রয়েছে।

হালকা আপডেট

function ParentCtrl() {
    var vm = this;
    vm.cities = ["NY", "Amsterdam", "Barcelona"];
}
    
function ChildCtrl($scope) {
    var vm = this;
    ParentCtrl.apply(vm, arguments);
    
    vm.parentCitiesByScope = $scope.pc.cities;
    vm.parentCities = vm.cities;
}
    
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.20/angular.min.js"></script>
<div ng-app ng-controller="ParentCtrl as pc">
  <div ng-controller="ChildCtrl as cc">
    <pre>{{cc.parentCities | json}}</pre>
    <pre>{{cc.parentCitiesByScope | json }}</pre>
    <pre>{{pc.cities | json}}</pre>
  </div>
</div>

আমি data-ng-controller="xyzController as vm" ব্যবহার করে আমার কন্ট্রোলার সেট আপ করেছি

আমি পিতা বা মাতা / সন্তানের নিস্তেজ নিয়ামক সঙ্গে একটি দৃশ্যকল্প আছে। আমি $parent.vm.property ব্যবহার করে নেস্টেড এইচটিএমএল প্যারেন্ট প্রোপার্টি অ্যাক্সেস করার কোন সমস্যা নেই, তবে আমি আমার সন্তানের নিয়ামক থেকে পিতা-মাতার সম্পত্তি অ্যাক্সেস করতে কীভাবে তা বুঝতে পারি না।

আমি $scope.$parent.vm.property করার চেষ্টা করেছি এবং তারপরে $scope.$parent.vm.property ব্যবহার করছি $scope.$parent.vm.property , কিন্তু এটি কাজ করছে না?

কেউ পরামর্শ দিতে পারেন?


আমি শুধু চেক করেছি

$scope.$parent.someProperty

আমার জন্য কাজ কর.

এবং এটা হবে

{{$parent.someProperty}}

দেখুন জন্য।


একটি শিশু উপাদান থেকে আপনি 'প্রয়োজন' সঙ্গে অভিভাবক উপাদান বৈশিষ্ট্য এবং পদ্ধতি অ্যাক্সেস করতে পারেন। এখানে একটি উদাহরণ:

মূল:

.component('myParent', mymodule.MyParentComponent)
...
controllerAs: 'vm',
...
var vm = this;
vm.parentProperty = 'hello from parent';

শিশুঃ

require: {
    myParentCtrl: '^myParent'
},
controllerAs: 'vm',
...
var vm = this;
vm.myParentCtrl.parentProperty = 'hello from child';

এছাড়াও আপনি "বৈশ্বিক" সুযোগে সুযোগ বজায় রাখতে এবং সঞ্চয় করতে পারেন।

আপনার যদি অন্য কোনও কন্ট্রোলারকে গোপন করে আপনার অ্যাপ্লিকেশানে মুখ্য নিয়ামক থাকে, তবে আপনি বিশ্বব্যাপী স্কোপে "হুক" ইনস্টল করতে পারেন:

function RootCtrl($scope) {
    $scope.root = $scope;
}

তারপরে কোনও শিশু নিয়ন্ত্রক, আপনি $scope.root দিয়ে "বিশ্বব্যাপী" সুযোগ অ্যাক্সেস করতে পারেন। আপনি এখানে যেকোনো কিছু বিশ্বব্যাপী দৃশ্যমান হবেন।

উদাহরণ:

function RootCtrl($scope) {
  $scope.root = $scope;
}

function ChildCtrl($scope) {
  $scope.setValue = function() {
    $scope.root.someGlobalVar = 'someVal';
  }
}

function OtherChildCtrl($scope) {
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app ng-controller="RootCtrl">
  
  <p ng-controller="ChildCtrl">
    <button ng-click="setValue()">Set someGlobalVar</button>
  </p>
  
  <p ng-controller="OtherChildCtrl">
    someGlobalVar value: {{someGlobalVar}}
  </p>

</div>


যখন আপনি সিনট্যাক্স as ব্যবহার করছেন, ParentController as parentCtrl , একটি নিয়ামক সংজ্ঞায়িত করতে তারপর সন্তানের নিয়ামক ব্যবহার করে পিতামাতার স্কোপ ভেরিয়েবল অ্যাক্সেস করতে নিম্নলিখিত ব্যবহার করুন:

var id = $scope.parentCtrl.id;

যেখানে parentCtrl হয় প্যারেন্ট কন্ট্রোলারের নামটি সিনট্যাক্স ব্যবহার করে এবং id একই নিয়ামক হিসাবে সংজ্ঞায়িত একটি পরিবর্তনশীল।


সম্ভবত এই লোম হয় কিন্তু আপনি কেবল কিছু বাইরের বস্তুর উভয় পয়েন্ট করতে পারেন:

var cities = [];

function ParentCtrl() {
    var vm = this;
    vm.cities = cities;
    vm.cities[0] = 'Oakland';
}

function ChildCtrl($scope) {
    var vm = this;
    vm.cities = cities;
}

এখানে সুবিধাটি হল যে ChildCtrl এ সম্পাদনাটি পিতামাতার ডেটাতে প্রচার করে।





angularjs-scope