문제

이 있는 경우 directive, 는 자신의 controller 에서 정의의 신체:

directives.directive("formWrapper", ['User','$location',  function(User, $location) {

    return {
       ...
       template: '<div>' +
                   '<input ng-click="cancel()" type="button" value="Cancel"/>' +
                   '<input ng-click="save()" type="button" value="Save" />' +
                  '</div>',

       controller: function($scope, $location, User) {

            $scope.fields = User.get( {username: "username"}  );

            var save = function() {...}

            var cancel = function() {...}          
        }
    }
}]);

template 섹션 노력하고 도달하는 기능 save()cancel() 에 정의되어 있는 컨트롤러입니다.

지금 작동하지 않을 클릭하면 해당 버튼을 아무 일도 일어나지 않습니다.

내가 정말 원하지 않을 정의할 save()cancel()$scope, 기 때문에 이 지시어를 사용합니다.또 어쩌면 그것은 이를 확인에 있는 그들 $scope?에 대한 확실하지 않는 격리입니다.

Q: 는 방법을 달성할 수 있습니다?일반적인 솔루션/비전에 대해는?

도움이 되었습니까?

해결책

당신이 필요하 넣 save()cancel() 에서 지시어의 범위 그래서 템플릿을 그들을 볼 수 있습니다(지금은 그들이 내부에서만 볼 수 컨트롤러 기능).

그래서 그 대신:

var save = function() {...}
var cancel = function() {...}  

$scope.save = function() {...}
$scope.cancel = function() {...}  

그것은 잘 이해에 있는 지시어 범위가 있습니다.그것과 같지는 않지에 넣어 $rootScope 는 전 세계에서 사용할 수 있습니다.

을 알 수 있을 추가 이를 지침:

scope: {},

$scope 제한되는 단지 이 지침(AKA"고립 범위").그래서 당신처럼 생각할 수 있는 객체 또는 함수 범위-당신은 오염 글로벌 네임스페이스가 있습니다.

여기에서의 데모: http://jsfiddle.net/uLfLM/1/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top