반응형
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>
자바스크립트
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/
제 목표는 "Selected" 영역에 "New value"를 표시하는 것입니다.어떻게 하면 내가 하려는 일을 해낼 수 있을까?내가 뭘 잘못하고 있지?
게다가, 나는 부품을 만들려고 노력하고 있어.동일한 방법으로 격리된 범위를 사용할 수 있습니까?
바이올린을 업데이트하고 기본적으로 올바른 "선택된" 변수를 얻기 위해 부모에게 가야 했으며, 또한 전달된 값과 내부 모델 간의 양방향 바인딩을 위해 격리 범위 =를 사용했습니다.
angular.module('app', [])
.directive("customTag", [function () {
return {
restrict: "E",
replace: true,
template: "<input type='button' value='Click me' />",
scope: {model:'='},
link: function (scope, element, attrs) {
element.bind('click', function () {
scope.model[attrs.selectedItem] = "New value";
scope.$apply();
});
}
};
}]);
function AppController($scope) {
$scope.selected = 'Old value';
}
및 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" model="$parent" />
</div>
<div ng-switch-when="New value">
<p>Worked</p>
</div>
</div>
</div>
속성 http://jsfiddle.net/nJ7FQ/4/에서 속성을 처음 읽도록 바이올린을 업데이트했습니다.
jsfiddle을 조금 개선했습니다.
angular.module('app', [])
.directive("customTag", ['$parse', function ($parse) {
return {
restrict: "E",
replace: true,
template: "<input type='button' value='Click me' />",
link: function (scope, element, attrs) {
element.bind('click', function () {
scope.$apply(function () {
$parse(attrs.selectedItem).assign(scope.$parent, "New value");
});
});
}
};
}]);
function AppController($scope) {
$scope.selected = { 'foo': 'Old value' };
}
이 방법으로 변경할 범위 값도 다음과 같은 객체 속성이 될 수 있습니다.selected.foo
를 참조해 주세요.또한 scope 파라미터를 삭제하고 항상 parent scope를 사용하도록 지시했습니다.그리고 마지막으로 클릭 핸들러를$apply
콜백(예를 들어 여기를 참조).물론 사용하는 것이 좋습니다.ngClick
대신element.bind()
.
언급URL : https://stackoverflow.com/questions/17561632/how-to-modify-scope-from-within-a-directive-in-angularjs
반응형
'programing' 카테고리의 다른 글
Gson을 사용한JSON 어레이 해석 방법 (0) | 2023.03.02 |
---|---|
Oracle SQL Where 절을 사용하여 30일보다 오래된 날짜 레코드를 검색합니다. (0) | 2023.03.02 |
확장할 구성 "반응"을 로드하지 못했습니다. (0) | 2023.03.02 |
CoffeeScript 프로젝트를 JavaScript로 변환하시겠습니까(최소화 없이)? (0) | 2023.03.02 |
angular.js를 사용하여 입력 상자를 비활성화하는 방법 (0) | 2023.03.02 |