"ඒ කොහොමද this
සහ $scope
AngularJS පාලකයන් වැඩ?"
කෙටි පිළිතුර :
this
- පාලක ඉදිකිරීම්කරු ශ්රිතය හැඳින්වූ විට,
this
පාලකය වේ.
$scope
වස්තුවක් මත අර්ථ දක්වා this
ඇති ශ්රිතයක් හැඳින්වූ විට, “ශ්රිතය හැඳින්වූ විට ක්රියාත්මක වන විෂය පථය” වේ. මෙය $scope
ශ්රිතය අර්ථ දක්වා ඇති (හෝ නොවිය හැකිය!) විය හැකිය . ඒ නිසා, මෙම උත්සවය තුල, this
සහ $scope
හැක නොවන සමාන විය.
$scope
- සෑම පාලකයකුටම සම්බන්ධ
$scope
වස්තුවක් ඇත.
- පාලක (ඉදිකිරීම්කරු) ශ්රිතයක් ආශ්රිත ගුණාංග සහ කාර්යයන් / හැසිරීම සැකසීමට වගකිව යුතුය
$scope
.
$scope
HTML / දර්ශනයෙන් ප්රවේශ විය හැක්කේ මෙම වස්තුව මත අර්ථ දක්වා ඇති ක්රම පමණි (සහ මව් විෂය පථ වස්තු, මූලාකෘති උරුමය ක්රියාත්මක වන්නේ නම්). උදා, සිට ng-click
, පෙරහන් ආදිය.
දිගු පිළිතුර :
පාලක ශ්රිතයක් යනු ජාවාස්ක්රිප්ට් ඉදිකිරීම් ශ්රිතයකි. ඉදිකිරීම්කරු ශ්රිතය ක්රියාත්මක වන විට (උදා: දර්ශනයක් පටවන විට), this
(එනම්, “ශ්රිත සන්දර්භය”) පාලක වස්තුවට සකසා ඇත. එබැවින් "ටැබ්" පාලක ඉදිකිරීම් ශ්රිතයේ, addPane ශ්රිතය නිර්මාණය වූ විට
this.addPane = function(pane) { ... }
එය නිර්මාණය කර ඇත්තේ control විෂය පථය මත නොව පාලක වස්තුව මත ය. දර්ශන වලට ඇඩ්පේන් ශ්රිතය දැකිය නොහැක - ඔවුන්ට ප්රවේශය ඇත්තේ $ විෂය පථය මත අර්ථ දක්වා ඇති ශ්රිත වලට පමණි. වෙනත් වචන වලින් කිවහොත්, HTML හි මෙය ක්රියා නොකරනු ඇත:
<a ng-click="addPane(newPane)">won't work</a>
"ටැබ්" පාලක ඉදි කිරීමේ කාර්යය ක්රියාත්මක කිරීමෙන් පසුව, අපට පහත සඳහන් දෑ ඇත:
ක හුදෙකලා විෂය පථය prototypically සිට අනුන - සිඳ කළු මාර්ගය prototypal උරුමය පෙන්නුම් විෂය පථය . (එය HTML හි විධානය හමු වූ විෂය පථයෙන් මූලාකෘතිමය වශයෙන් උරුම නොවේ.)
දැන්, කවුළු විධානයේ සම්බන්ධක ක්රියාකාරිත්වයට ටැබ් විධානය සමඟ සන්නිවේදනය කිරීමට අවශ්ය වේ (එයින් අදහස් කරන්නේ එය ටැබ් හුදකලා වීමට බලපාන බවයි $ යම් ආකාරයකින් විෂය පථය). සිදුවීම් භාවිතා කළ හැකි නමුත් තවත් යාන්ත්රණයක් වන්නේ require
ටැබ් පාලකය වෙත කවුළුව යොමු කිරීමයි. ( require
ටැබ් වෙත විෂය පථය යොමු කිරීම සඳහා යාන්ත්රණයක් නොමැති බව පෙනේ $ විෂය පථය.)
ඉතින්, මෙය ප්රශ්නයක් අසයි: අපට ටැබ් පාලකයට පමණක් ප්රවේශය තිබේ නම්, අපට ටැබ් හුදකලා $ විෂය පථයට ප්රවේශය ලැබෙන්නේ කෙසේද (අපට සැබවින්ම අවශ්ය වන්නේ එයයි)?
හොඳයි, රතු තිත් රේඛාව පිළිතුරයි. AddPane () ශ්රිතයේ “විෂය පථය” (මම මෙහි ජාවාස්ක්රිප්ට් හි ක්රියාකාරී විෂය පථය / වසා දැමීම් ගැන සඳහන් කරමි) ටැබ් වලට ක්රියාකාරී ප්රවේශය හුදකලා $ විෂය පථයට ලබා දේ. එනම්, addPane () ට ඉහත රූපසටහනේ ඇති "ටැබ් හුදකලා දර්ශනය" ට ප්රවේශය ඇත්තේ addPane () නිර්වචනය කරන විට වසා දැමූ නිසාය. (අපි ඒ වෙනුවට ටැබ් $ විෂය පථය මත ඇඩ්පේන් () අර්ථ දැක්වුවහොත්, කවුළු විධානයට මෙම ශ්රිතයට ප්රවේශය නොලැබෙන අතර එම නිසා ටැබ් සමඟ සන්නිවේදනය කිරීමට ක්රමයක් නොමැත $ විෂය පථය.)
ඔබේ ප්රශ්නයේ අනෙක් කොටසට පිළිතුරු දීමට how does $scope work in controllers?
:
$ විෂය පථය මත අර්ථ දක්වා ඇති ශ්රිත තුළ, this
"ශ්රිතය හැඳින්වූ විට / ක්රියාත්මක වන $ විෂය පථයට" සකසා ඇත. අපට පහත HTML තිබේ යැයි සිතමු:
<div ng-controller="ParentCtrl">
<a ng-click="logThisAndScope()">log "this" and $scope</a> - parent scope
<div ng-controller="ChildCtrl">
<a ng-click="logThisAndScope()">log "this" and $scope</a> - child scope
</div>
</div>
සහ ParentCtrl
(පමණක්) ඇත
$scope.logThisAndScope = function() {
console.log(this, $scope)
}
පළමු සබැඳිය ක්ලික් කිරීමෙන් බව පෙන්වා දෙනු ඇත this
සහ $scope
"සිට, එකම ක්රියාව නම් වූ විට ක්රියාත්මක විෂය පථය සමග සම්බන්ධ විෂය පථය වේ" ParentCtrl
.
දෙවන ලින්ක් හෙළි කරනු ඇත ක්ලික් this
හා $scope
ය නොවන එකම, "සිට මෙම උත්සවය නමින් විට ක්රියාත්මක විෂය පථය සමග සම්බන්ධ විෂය පථය වේ" ChildCtrl
. ඒ නිසා මෙහි, this
කිරීමට පියවර ගෙන තිබේ ChildCtrl
ගේ $scope
. ක්රමවේදය තුළ $scope
තවමත් ParentCtrl
විෂය පථය වේ.
ෆෙඩෙල්
this
$ විෂය පථය මත අර්ථ දක්වා ඇති ශ්රිතයක් ඇතුළත භාවිතා නොකිරීමට මම උත්සාහ කරමි , එය කුමන විෂය පථයට බලපාන්නේද යන්න ව්යාකූල වන හෙයින්, විශේෂයෙන් ng- පුනරාවර්තනය, ng-include, ng-switch, සහ විධානයන් සියල්ලටම තමන්ගේම ළමා පරාසයන් නිර්මාණය කළ හැකි බව සලකයි.