HTML部分
<index></index>
指令
angular.module('todoWithAngularApp').directive('index', function () {
return {
restrict: 'E',
templateUrl: '/scripts/template/index.html',
replace: true,
link: function (scope, iElement, iAttrs) {
console.log(scope);
console.log(iElement);
console.log(iAttrs);
iElement.on('click', '#addTaskClass', function(event) {
scope.addTaskClassBoxDisplay = true;
console.log(scope.addTaskClassBoxDisplay);
})
}
};
控制器
angular.module('todoWithAngularApp').controller('IndexCtrl', function ($scope) {
$scope.addTaskClassBoxDisplay = false;
});
怎样才能让指令去修改控制器上的$scope的属性
阿神2017-05-15 16:55:35
무책임하고 검증되지 않았습니다. 다음은 몇 가지 아이디어입니다.
1. addTaskClassBoxDisplay를 객체 아래에 배치합니다(예:
).
scope.obj.addTaskClassBoxDisplay = true
2. 메시지 사용
3. 서비스 이용
위의 세 가지 방법은 Angular의 모듈 간에 데이터를 공유하는 일반적인 방법이기도 하며 다양한 시나리오에 적용할 수 있습니다.
曾经蜡笔没有小新2017-05-15 16:55:35
http://stackoverflow.com/questions/14115701/angularjs-create-a-directi...
为情所困2017-05-15 16:55:35
먼저 독립된 범위를 열고 '='를 사용하여 범위의 개체에 대해 양방향 바인딩을 수행합니다. 아래 예와 같이 명령어의 obj가 바인딩되어 addTaskClassBoxDisplay 개체에 전송됩니다.
으아악伊谢尔伦2017-05-15 16:55:35
이 질문을 하기 전에 질문을 정정하겠습니다.
컨트롤러의 $scope를 수정하려고 합니다. 우선, 사용자가 직접 정의한 명령어는 컨트롤러의 범위입니다. 별도의 범위를 상속하거나 생성하지 않습니다. 따라서 명령어 범위에서 속성을 수정하면 이 명령어를 참조하는 컨트롤러 범위의 해당 속성도 확실히 수정됩니다.
컨트롤러를 작성할 때 컨트롤러의 범위를 수정하지 않은 이유는 무엇입니까?
그 이유는 당신이
를 사용했기 때문입니다.
iElement.on('click', '#addTaskClass', function(event) {
범위.addTaskClassBoxDisplay = true;
직접 정의한 클릭 리스너는 범위 속성의 수정을 트리거하며 더티 검사를 수행하도록 Angular에 알리지 않습니다. 즉, addTaskClassBoxDisplay를 수정하면 페이지에서 응답하지 않습니다.
이 오류를 해결하는 방법. $apply()만 추가하면 됩니다. 더티 검사를 수동으로 실행합니다. 사용 방법은 Baidu에 직접 물어보세요.
이제 질문으로 돌아갑니다. 지시어가 컨트롤러의 범위를 수정하도록 하는 방법.
1. 지시어의 내부 속성부터 시작해 보겠습니다.
지시문의 범위 속성, 세 가지 메소드는 컨트롤러의 범위를 수정할 수 있습니다.
1.범위가 정의되지 않았거나 범위:false입니다. 컨트롤러의 범위를 직접 사용합니다
2. 범위: 사실입니다. 컨트롤러를 상속하는 범위입니다. 이때 수정하려는 콘텐츠는 객체로 정의하는 것이 가장 좋습니다.
3. 범위: {키:'=키'}. 독립적인 범위입니다. 수정 방법은 위와 동일하며, 객체로 정의하는 것이 가장 좋습니다
그런 다음 다른 사람에게 말하십시오. iAttrs를 사용하여 이를 지시어의 속성으로 정의합니다.
var 모델 = $parse(iAttrs.addTaskClassBoxDisplay);
iElement.on('click', '#addTaskClass', function(event) {
모델.할당(범위,참);
범위.$apply();
2. 라디오를 사용하세요. 특히 바이두.
3. 배송을 위해 서비스를 이용하세요.
4. 명령은 $rootScope를 호출한 다음 컨트롤러의 범위 속성을 $rootScope 속성과 동일하게 만듭니다. (이러지 마세요)
이제 출근 시간이므로 나중에 Baidu를 사용할 수 있습니다.
世界只因有你2017-05-15 16:55:35
http://www.hubwiz.com/course/54f3ba65e564e50cfccbad4b/
기본 사항: http://www.hubwiz.com/course/547c3e3b88dba0087c55b4e5/