我需要修改指令中回調中的根範圍屬性。但是該指令位於由switch指令創建的內部作用域中。如何在AngularJs中的指令中修改範圍
HTML
<div ng-app="app" ng-controller='AppController'>
<p>Selected: {{ selected }}</p>
<div ng-switch on="selected">
<div ng-switch-default>
<p>Item: {{ selected }}</p>
<custom-tag selected-item="selected" />
</div>
<div ng-switch-when="New value">
<p>Worked</p>
</div>
</div>
</div>
的JavaScript
angular.module('app', [])
.directive("customTag", [function() {
return {
restrict: "E",
replace: true,
template: "<input type='button' value='Click me' />",
link: function (scope, element, attrs) {
element.bind('click', function() {
scope[attrs.selectedItem] = "New value";
scope.$apply();
});
}
};
}]);
function AppController($scope) {
$scope.selected = 'Old value';
}
小提琴:http://jsfiddle.net/nJ7FQ/
我的目標是能夠在選定區域顯示 「新價值」。 我該如何完成我想要做的事情?我究竟做錯了什麼?
此外,因爲我正在嘗試製作組件。有沒有辦法做到這一點,但有一個孤立的範圍?
我更喜歡你的第一個解決方案(http://jsfiddle.net/nJ7FQ/2/)它似乎更清潔。但是,爲什麼我應該使用$ parent.selected,據我所知,子範圍繼承父級的所有屬性? – Fernando
那麼如果你改變了繼承的選擇變量,它不會更改父範圍選定變量,通過上移到父級並更改該範圍上的變量,那麼當讀取子選定值時,它將變爲家長。如果更改子範圍的選定屬性,它將成爲子範圍上的新屬性,不再繼承。 (我知道它很混亂)如果你想Google它,這是Javascript原型繼承。 – shaunhusain
非常清楚!非常感謝。 – Fernando