AngularJS පාලකයන්ගේ 'මෙය' එදිරිව $ විෂය පථය


1030

තුළ AngularJS ගේ මුල් පිටුව ක "සංරචක නිර්මාණය කරන්න" කොටස , මෙම උදාහරණය ඇත:

controller: function($scope, $element) {
  var panes = $scope.panes = [];
  $scope.select = function(pane) {
    angular.forEach(panes, function(pane) {
      pane.selected = false;
    });
    pane.selected = true;
  }
  this.addPane = function(pane) {
    if (panes.length == 0) $scope.select(pane);
    panes.push(pane);
  }
}

කොපමණ දැනුම් selectක්රමය එකතු $scope, නමුත් addPaneක්රමය එකතු this. මම එය වෙනස් කළහොත් $scope.addPane, කේතය කැඩී යයි.

ප්‍රලේඛනය පවසන්නේ ඇත්ත වශයෙන්ම වෙනසක් ඇති නමුත් එහි වෙනස කුමක්දැයි එහි සඳහන් නොවේ:

කෝණික (පෙර 1.0 ආර්සී) හි පෙර සංස්කරණ මඟින් ඔබට ක්‍රමවේදය thisසමඟ එකිනෙකට වෙනස් ලෙස භාවිතා කිරීමට ඉඩ ලබා දී ඇත $scope, නමුත් මෙය තවදුරටත් එසේ නොවේ. විෂය පථය අර්ථ ක්රම ඇතුළත thisහා $scopeඑකිනෙකට හුවමාරු (කෝණික කට්ටල thisකිරීමට $scopeනමුත් එසේ ඔබේ පාලකය ඉදිකිරීමටත් තුළ),.

කොහොමද කරන්නේ thisසහ $scopeAngularJS පාලකයන් වැඩ?


මෙයද අවුල් සහගත බව මට පෙනේ. දර්ශනයක් පාලකයක් නියම කළ විට (උදා: ng-controller = '...'), එම පාලකය හා සම්බන්ධ $ විෂය පථය ඒ සමඟ එන බව පෙනේ, මන්ද යත් දර්ශනයට $ විෂය පථයට ප්‍රවේශ විය හැකි බැවිනි. නමුත් විධානයකට තවත් පාලකයක් අවශ්‍ය වූ විට (පසුව එය සම්බන්ධ කිරීමේ කාර්යයේදී එය භාවිතා කරයි), අනෙක් පාලකය සමඟ සම්බන්ධිත විෂය පථය ඒ සමඟ නොපැමිණේ ද?
මාර්ක් රාජ්කොක්

"පෙර සංස්කරණ ..." පිළිබඳ ව්‍යාකූල උපුටා ගැනීම මේ වන විට ඉවත් කර තිබේද? එවිට යාවත්කාලීනය ක්‍රියාත්මක විය හැකිද?
දිමිත්‍රි සයිට්සෙව්

ඒකක පරීක්ෂාව සඳහා, ඔබ '$ විෂය පථය' වෙනුවට 'මෙය' භාවිතා කරන්නේ නම්, ඔබට සමච්චල් කළ හැකි විෂය පථයකින් පාලකය එන්නත් කළ නොහැක, එබැවින් ඔබට ඒකක පරීක්ෂණ කළ නොහැක. 'මෙය' භාවිතා කිරීම හොඳ පුරුද්දක් යැයි මම නොසිතමි.
abentan

Answers:


1002

"ඒ කොහොමද thisසහ $scopeAngularJS පාලකයන් වැඩ?"

කෙටි පිළිතුර :

  • this
    • පාලක ඉදිකිරීම්කරු ශ්‍රිතය හැඳින්වූ විට, thisපාලකය වේ.
    • $scopeවස්තුවක් මත අර්ථ දක්වා thisඇති ශ්‍රිතයක් හැඳින්වූ විට, “ශ්‍රිතය හැඳින්වූ විට ක්‍රියාත්මක වන විෂය පථය” වේ. මෙය $scopeශ්‍රිතය අර්ථ දක්වා ඇති (හෝ නොවිය හැකිය!) විය හැකිය . ඒ නිසා, මෙම උත්සවය තුල, thisසහ $scopeහැක නොවන සමාන විය.
  • $scope
    • සෑම පාලකයකුටම සම්බන්ධ $scopeවස්තුවක් ඇත.
    • පාලක (ඉදිකිරීම්කරු) ශ්‍රිතයක් ආශ්‍රිත ගුණාංග සහ කාර්යයන් / හැසිරීම සැකසීමට වගකිව යුතුය $scope.
    • $scopeHTML / දර්ශනයෙන් ප්‍රවේශ විය හැක්කේ මෙම වස්තුව මත අර්ථ දක්වා ඇති ක්‍රම පමණි (සහ මව් විෂය පථ වස්තු, මූලාකෘති උරුමය ක්‍රියාත්මක වන්නේ නම්). උදා, සිට 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, සහ විධානයන් සියල්ලටම තමන්ගේම ළමා පරාසයන් නිර්මාණය කළ හැකි බව සලකයි.


6
amtamakisquare, පාලක ඉදිකිරීම්කරුගේ ශ්‍රිතය හැඳින්වූ විට ඔබ උපුටා ගත් තද අකුරු අදාළ වේ යැයි මම විශ්වාස කරමි - එනම්, පාලකය නිර්මාණය කළ විට = $ විෂය පථයට සම්බන්ධ වේ. අත්තනෝමතික ජාවාස්ක්‍රිප්ට් කේතය $ විෂය පථයේ වස්තුවක් මත අර්ථ දක්වා ඇති ක්‍රමයක් ඇමතූ විට එය පසුව අදාළ නොවේ.
මාර්ක් රාජ්කොක්

79
පාලකය නම් කිරීමෙන් "ඇඩ්පේන් () ශ්‍රිතය කෙලින්ම අච්චුවට ඇමතිය හැකි බව සලකන්න:" MyController as myctrl "සහ පසුව myctrl.addPane (). Docs.angularjs.org/guide/concepts#controller
ක්‍රිස්ටෝෆ්

83
ඕනෑවට වඩා ආවේනික සංකීර්ණත්වය.
ඉනාන්ක් ගුමස්

11
මෙය ඉතා සූක්ෂම පිළිතුර වේ, නමුත් මම ප්රායෝගික ගැටළු (ආපසු පැමිණි විට $ විෂය පථය පතා ආකාරය. $ අදාළ () පාලක ක්රමය තුළ මෙම 'භාවිතා අර්ථ ) මම එය කටයුතු කළ නොහැකි විය. එබැවින් මෙය තවමත් ප්‍රයෝජනවත් පිළිතුරක් වන අතර, මම "සහජ සංකීර්ණත්වය" අවුල් සහගතය.
ඩම්බල්ඩෑඩ්

11
ජාවාස්ක්‍රිප්ට් - කඹ ගොඩක් [එල්ලී සිටීමට].
AlikElzin-kilaka

55

'ඇඩ්පේන්' මේ සඳහා පවරා ඇත්තේ හේතුවයි <pane>.

මෙම paneනියෝගය කරන්නේ require: '^tabs'සබැඳිය කාර්යය බවට, දෙමාපියන් උපදෙස් සිට ටැබ් පාලකය වස්තුව සැදී පැහැදී.

addPaneසම්බන්ධක ශ්‍රිතයට එය දැකිය හැකි වන thisපරිදි පවරා ඇත pane. එවිට paneසම්බන්ධක ශ්‍රිතයේ, පාලකයේ addPaneදේපලක් පමණක් tabsවන අතර එය හුදෙක් ටැබ්ස්කොන්ට්‍රොලර් ඕබෙක්ට්.අඩ්පේන් ය. එබැවින් කවුළු විධානයේ සම්බන්ධක කාර්යයට ටැබ් පාලක වස්තුවට ප්‍රවේශ විය හැකි අතර එම නිසා ඇඩ්පේන් ක්‍රමයට ප්‍රවේශ විය හැකිය.

මගේ පැහැදිලි කිරීම ප්‍රමාණවත් තරම් පැහැදිලි යැයි මම සිතමි .. එය පැහැදිලි කිරීම දුෂ්කර ය.


3
පැහැදිලි කිරීම සඳහා ස්තූතියි. ලේඛකය මඟින් විෂය පථය සකසන ශ්‍රිතයක් පමණක් බව පෙනේ. සියලු ක්‍රියාවන් විෂය පථය තුළ සිදුවුවහොත් පාලකය වස්තුවක් ලෙස සලකන්නේ ඇයි? සම්බන්ධක කාර්යයට මව් විෂය පථය පමණක් යොමු නොකරන්නේ ඇයි? සංස්කරණය කරන්න: මෙම ප්‍රශ්නය වඩා හොඳින් වාක්‍ය ඛණ්ඩනය කිරීම සඳහා, පාලක ක්‍රම සහ විෂය පථ ක්‍රම දෙකම එකම දත්ත ව්‍යුහයක් මත (විෂය පථය) ක්‍රියාත්මක වන්නේ නම්, ඒවා සියල්ලම එක තැනකට දැමිය යුත්තේ ඇයි?
ඇලෙක්සි බෝරොනීන්

"නැවත භාවිතා කළ හැකි සංරචක සඳහා සහය දැක්වීමට ඇති ආශාව නිසා මව් විෂය පථය තුළ දත්ත අහම්බෙන් කියවීම හෝ වෙනස් කිරීම නොකළ යුතුය." නමුත් විධානයකට ඇත්ත වශයෙන්ම මව් විෂය පථයේ යම් නිශ්චිත දත්ත කියවීමට හෝ වෙනස් කිරීමට අවශ්‍ය නම් ('කවුළු' නියෝගය මෙන්), එයට යම් උත්සාහයක් අවශ්‍ය වේ: අපේක්ෂිත මව් විෂය පථය ඇති පාලකය 'අවශ්‍ය' කරන්න, ඉන්පසු අර්ථ දක්වන්න a නිශ්චිත දත්ත වෙත ප්‍රවේශ වීම සඳහා එම පාලකයේ ක්‍රමය ('මෙය' නොව $ විෂය පථය භාවිතා කරන්න). අපේක්ෂිත මාපිය විෂය පථය lnk func තුළට එන්නත් කර නොමැති බැවින්, එය කළ හැකි එකම ක්‍රමය මෙය යැයි මම සිතමි.
මාර්ක් රාජ්කොක්

1
හේයි සලකුණ, නියමයේ විෂය පථය වෙනස් කිරීම ඇත්තෙන්ම පහසුය. ඔබට සම්බන්ධක ශ්‍රිතය භාවිතා කළ හැකිය jsfiddle.net/TuNyj
ජොස්ලින්

3
ස්තූතියි nd ඇන්ඩි ෆෙඩෙල්ට. ඔබගේ ප්‍රහේලිකාව තුළ, විධානය නව විෂය පථයක් නිර්මාණය නොකරයි, එබැවින් සම්බන්ධක ක්‍රියාකාරිත්වයට මෙහි පාලකයේ විෂය පථයට කෙලින්ම පිවිසිය හැකි ආකාරය මට පෙනේ (එක් විෂය පථයක් පමණක් ඇති බැවින්). ටැබ් සහ කවුළු විධානයන් හුදකලා විෂය පථ භාවිතා කරයි (එනම්, නව ළමා විෂයයන් නිර්මාණය කරනු ලබන්නේ මව් විෂය පථයෙන් මූලාකෘති වශයෙන් උරුම නොවන). හුදකලා විෂය පථය සඳහා, පාලකය මත ක්‍රමයක් නිර්වචනය කිරීම ('මෙය' භාවිතා කිරීම) වෙනත් විධානයකට අනෙක් (හුදකලා) විෂය පථයට (වක්‍ර) ප්‍රවේශය ලබා ගැනීමට ඉඩ දෙන එකම ක්‍රමය බව පෙනේ.
මාර්ක් රාජ්කොක්

27

මේ දෙක අතර ඇති වෙනස පිළිබඳව මා සිත්ගන්නාසුලු පැහැදිලි කිරීමක් කියවා ඇති අතර, පාලකයට ආකෘති ඇමිණීමට වැඩි කැමැත්තක් දක්වන අතර දර්ශනයට ආකෘති බැඳීමට පාලක නොහොත් පාලකය. http://toddmotto.com/digging-into-angulars-controller-as-syntax/ යනු ලිපියයි.
ඔහු එය සඳහන් නොකරයි, නමුත් විධානයන් නිර්වචනය කිරීමේදී, ඔබට බහු විධානයන් අතර යමක් බෙදා ගැනීමට අවශ්‍ය නම් සහ සේවාවක් අවශ්‍ය නොවන්නේ නම් (සේවාවන් කරදරයක් වන නීත්‍යානුකූල අවස්ථා තිබේ) ඉන්පසු දත්ත මව් නියෝගයේ පාලකයට අමුණන්න.

මෙම $scopeසේවාව $watchවඩාත් පැහැදිලිව පෙනෙන පරිදි බොහෝ ප්‍රයෝජනවත් දේ සපයයි , නමුත් ඔබට දර්ශනයට දත්ත බැඳීමට අවශ්‍ය නම්, අච්චුවේ සරල පාලකය සහ 'පාලකය ලෙස' භාවිතා කිරීම කදිම හා තර්ක කළ හැකි වඩාත් සුදුසුය.


20

පහත දැක්වෙන ලිපිය කියවීමට මම ඔබට නිර්දේශ කරමි: AngularJS: "පාලකය ලෙස" හෝ "ope විෂය පථය"?

"$ විෂය පථයට" වඩා විචල්‍යයන් නිරාවරණය කිරීම සඳහා "පාලකය ලෙස" භාවිතා කිරීමේ වාසි එය ඉතා හොඳින් විස්තර කරයි.

ඔබ විශේෂයෙන් විමසා ඇත්තේ ක්‍රම ගැන මිස විචල්‍යයන් ගැන නොවන බව මම දනිමි, නමුත් මම සිතන්නේ එක් තාක්‍ෂණයකට ඇලී සිටීම හා ඊට අනුකූල වීම වඩා හොඳ බවය.

එබැවින් මගේ මතය අනුව, ලිපියේ සාකච්ඡා කර ඇති විචල්‍යතා ගැටලුව නිසා, “පාලකය ලෙස” තාක්‍ෂණය භාවිතා කිරීම වඩා හොඳ වන අතර එය ක්‍රමවේදයන්ට අදාළ වේ.


16

මෙම පා course මාලාවේදී ( https://www.codeschool.com/courses/shaping-up-with-angular-js ) ඔවුන් "මෙය" සහ තවත් බොහෝ දේ භාවිතා කරන්නේ කෙසේදැයි පැහැදිලි කරයි.

ඔබ "මෙම" ක්‍රමය හරහා පාලකයට ක්‍රමයක් එකතු කරන්නේ නම්, ඔබේ දේපළ හෝ ක්‍රමය පාලකගේ නම "තිත" ලෙස දැක්විය යුතුය.

උදාහරණයක් ලෙස ඔබේ පාලකය දර්ශනයෙන් භාවිතා කිරීමෙන් ඔබට මෙවැනි කේතයක් තිබිය හැකිය:

    <div data-ng-controller="YourController as aliasOfYourController">

       Your first pane is {{aliasOfYourController.panes[0]}}

    </div>

6
පා course මාලාව හැදෑරීමෙන් පසු, කේත භාවිතයෙන් මා වහාම ව්‍යාකූල විය $scope, එබැවින් එය සඳහන් කිරීම ගැන ස්තූතියි.
මැට් මොන්ටාග්

16
එම පාඨමාලාව සියලු දී $ විෂය පථය ගැන සඳහන් නොකරයි, ඔවුන් හුදෙක් භාවිතා asහා thisඉතින් කොහොමද එය වෙනස පැහැදිලි උපකාර කළ හැක්කේ කෙසේද?
ඩම්බල්ඩෑඩ්

10
කෝණික සමඟ මගේ පළමු ස්පර්ශය සඳහන් කළ පා course මාලාවෙන් වූ අතර, $scopeකිසි විටෙකත් සඳහන් නොකළ thisපරිදි, පාලකයන් තුළ පමණක් භාවිතා කිරීමට මම ඉගෙන ගතිමි . ගැටළුව වන්නේ ඔබ ඔබේ පාලකය තුළ පොරොන්දු ඉටුකිරීමට පටන් ගත් විට, ඔබට බොහෝ යොමු ගැටළු ඇති අතර පොරොන්දු ආපසු ලබා දීමේ ශ්‍රිතය තුළ සිට ආකෘතිය සඳහන් කිරීම thisවැනි දේවල් කිරීම ආරම්භ කළ යුතුය. ඒ නිසා එය නිසා, මම මට භාවිතා යුතු ක්රමය ගැන ඉතා ව්යාකූල තවමත් ඉන්නේ හෝ . var me = thisthis$scopethis
un නෝ ෆින්ගර්

@BrunoFinger අවාසනාවකට මෙන්, ඔබට අවශ්ය var me = thisහෝ .bind(this)ඔබ පොරොන්දු, හෝ වෙනත් වසා-බර දේවල් කරන්නේ සෑම විටම. එයට කෝණික සමග කිසිදු සම්බන්ධයක් නැත.
Dzmitry Lazerka

1
වැදගත් දෙය නම් එය පාලකය තුළට ng-controller="MyCtrl as MC"දැමීම හා සමාන බව දැන $scope.MC = thisගැනීමයි - එය අච්චුවේ භාවිතා කිරීම සඳහා විෂය පථය මත MyCtrl හි උදාහරණයක් (මෙය) අර්ථ දක්වයි{{ MC.foo }}
විලියම් බී

3

කෝණික (පෙර 1.0 ආර්සී) හි පෙර අනුවාදයන් ඔබට $ විෂය පථය ක්‍රමය සමඟ හුවමාරු කර ගැනීමට ඉඩ දී ඇත, නමුත් මෙය තවදුරටත් එසේ නොවේ. විෂය පථය මත අර්ථ දක්වා ඇති ක්‍රමවේදයන් තුළ මෙය සහ $ විෂය පථය එකිනෙකට හුවමාරු වේ (කෝණික මෙය $ විෂය පථයට සකසයි), නමුත් වෙනත් ආකාරයකින් ඔබේ පාලක ඉදිකිරීම්කරු තුළ නොවේ.

මෙම හැසිරීම නැවත ගෙන ඒමට (එය වෙනස් කළේ ඇයිදැයි කිසිවෙකු දන්නවාද?) ඔබට එකතු කළ හැකිය:

return angular.extend($scope, this);

ඔබගේ පාලක ශ්‍රිතය අවසානයේ (මෙම පාලක ශ්‍රිතයට $ විෂය පථය එන්නත් කර තිබේ නම්).

ඔබට දරුවෙකු ලැබිය හැකි පාලක වස්තුවක් හරහා මව් විෂය පථයට ප්‍රවේශ වීමේ හොඳ බලපෑමක් මෙය ඇත require: '^myParentDirective'


7
මෙය සහ $ විෂය පථය වෙනස් වන්නේ මන්ද යන්න පිළිබඳව මෙම ලිපිය හොඳ පැහැදිලි කිරීමක් සපයයි.
රොබට් මාටින්

1

$ විෂය පථයට වෙනස් 'මෙය' ඇති අතර පාලකය 'මෙය' වේ.එහෙත් ඔබ පාලකය තුළ console.log (මෙය) තැබුවහොත් එය ඔබට වස්තුවක් (පාලකය) ලබා දෙන අතර this.addPane () පාලක වස්තුවට addPane ක්‍රමය එක් කරයි. නමුත් $ විෂය පථයට වෙනස් විෂය පථයක් ඇති අතර එහි විෂය පථයේ ඇති සියලුම ක්‍රම $ scope.methodName () මගින් අනුමත කළ යුතුය. this.methodName()ඇතුළත පාලකය යනු පාලක වස්තුව තුළ මෙතෝස් එක් කිරීමයි. $scope.functionName()HTML සහ ඇතුළත ඇත

$scope.functionName(){
    this.name="Name";
    //or
    $scope.myname="myname"//are same}

මෙම කේතය ඔබේ සංස්කාරකයේ අලවා බැලීමට කොන්සෝලය විවෘත කරන්න ...

 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>this $sope vs controller</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular.min.js"></script>
    <script>
        var app=angular.module("myApp",[]);
app.controller("ctrlExample",function($scope){
          console.log("ctrl 'this'",this);
          //this(object) of controller different then $scope
          $scope.firstName="Andy";
          $scope.lastName="Bot";
          this.nickName="ABot";
          this.controllerMethod=function(){

            console.log("controllerMethod ",this);
          }
          $scope.show=function(){
              console.log("$scope 'this",this);
              //this of $scope
              $scope.message="Welcome User";
          }

        });
</script>
</head>
<body ng-app="myApp" >
<div ng-controller="ctrlExample">
       Comming From $SCOPE :{{firstName}}
       <br><br>
       Comming from $SCOPE:{{lastName}}
       <br><br>
       Should Come From Controller:{{nickName}}
       <p>
            Blank nickName is because nickName is attached to 
           'this' of controller.
       </p>

       <br><br>
       <button ng-click="controllerMethod()">Controller Method</button>

       <br><br>
       <button ng-click="show()">Show</button>
       <p>{{message}}</p>

   </div>

</body>
</html>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.