Передать переменную в директиву AngularJS без изолированного объема

Я изучаю директиву AngularJS, и одна вещь, которую я хочу сделать, - передать некоторую переменную $scope.message в родительском scope (a scope of controller), и я хочу, чтобы она была переименована в param внутри directive alert. Я могу сделать это с изолированной областью:

<div alert param="message"></div>

и определите

.directive("alert", function(){
    return{
        restrict: "A",
        scope: {
            param: "="
        },
        link: function(scope){
            console.log(scope.param) # log the message correctly
        }
    }
})

Но могу ли я сделать это без использования изолированной области? Предположим, я хочу добавить еще directive toast в <div toast alert></div> и использовать те же param (сохраняя привязку двухсторонней привязки), наивно сделаю

.directive("toast", function(){
    return{
        restrict: "A",
        scope: {
            param: "="
        },
        link: function(scope){
            console.log(scope.param)
        }
    }
})

Я обязательно получу ошибку Multiple directives [alert, toast] asking for new/isolated scope on:<div...

Итак, во-первых, мой вопрос заключается в том, как переименовать родительскую переменную области без изолированной области и как обмениваться переменными, когда два directives помещаются в один DOM?

Ответ 1

Измените свою директиву тост:

.directive("toast", function(){
    return{
        restrict: "A",
        link: function(scope, elem, attrs){
            var param = scope.$eval(attrs.param);
            console.log(param)
        }
    }
})

Пример скрипта.

Поскольку тост теперь находится в том же объеме, что и родительский (если бы он был разрешен для выделения области), вы можете просто вызвать $eval on scope с атрибутом param для получения значения.