Javascript 表示为另一个指令don'属性的指令的链接和控制器功能;行不通

Javascript 表示为另一个指令don'属性的指令的链接和控制器功能;行不通,javascript,angularjs,angularjs-directive,angularjs-scope,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,有以下问题。我想作出两项指示。其中一个将成为另一个的属性。 像这样的 <html> <title>Directives</title> <head lang="en"> <meta charset="utf-8"> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.min.js" type="text/javascript">

有以下问题。我想作出两项指示。其中一个将成为另一个的属性。 像这样的

<html>
<title>Directives</title>
<head lang="en">
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.min.js" type="text/javascript"></script>
<script src="main.js"></script>
</head>
<body ng-app="app">
    <outer inner></outer>
</body>
</html>
问题是外部控制器工作,而内部控制器不工作。。。链接和控制器功能都不起作用。。。我不明白怎么了


有什么想法吗?

它不起作用的原因是,两个指令都被要求在同一个元素上呈现一个模板,并且对于哪个指令应该被优先考虑,它是不明确的

您可以通过赋予内部指令优先于外部指令(数字越大表示优先级越高)来解决此问题

内部:

app.directive('inner', function() {
   return {
       priority:2,
       restrict: "AC",
       transclude: true,
       replace: false,
       template: "<div>{{say()}}<span ng-transclude/></div>",
       controller: function($scope) {
        $scope.message = "";

        $scope.say = function() {
            return "this is message";
        };

       // $scope.say(); // this doesn't work as well
        console.log('controller...');
       },
       link: function(scope, element, attrs) {    
          // alert('hey');
          // console.log('link...');
       }
    };
 });
app.directive('internal',function(){
返回{
优先事项:2,
限制:“AC”,
是的,
替换:false,
模板:“{{say()}}”,
控制器:功能($scope){
$scope.message=“”;
$scope.say=函数(){
返回“这是消息”;
};
//$scope.say();//这也不起作用
log('controller…');
},
链接:函数(作用域、元素、属性){
//警惕(‘嘿’);
//log('link…');
}
};
});
此外,这两个指令都不能排除其内容。一个必须是“transclude:false”,另一个必须是transclude:true

app.directive('outer', function($q, $rootScope) {   

    return {       
        priority:1,
        restrict: "E",
        transclude:false,
        scope: { /* isolated scope */ },
        controller: function($scope) {
        $scope.message = "";

        $scope.sayAgain = function() {
            return  "one more message";
        };

        $scope.sayAgain(); // this doesn't work as well
    },
    template: "<div>{{sayAgain()}}</div>",
    link: function (scope, elem, attrs, ctrl) {}
    }
});
app.directive('outer',function($q,$rootScope){
返回{
优先事项:1,
限制:“E”,
排除:错误,
作用域:{/*独立作用域*/},
控制器:功能($scope){
$scope.message=“”;
$scope.sayreach=函数(){
返回“多一条消息”;
};
$scope.sayreach();//这也不起作用
},
模板:“{{sayreath()}}”,
链接:函数(作用域、元素、属性、ctrl){}
}
});
这是一把小提琴:


我认为,这种代码是不够的。我运行它没有问题。试着用一个plunk来放足够的代码使它崩溃。确实是一个fiddle/plunk,但是你能在没有
replace:true
的情况下也尝试一下吗?事实上,这就是我所有的。。。但这是小提琴上的相同代码。也许这会有帮助。。。
app.directive('outer', function($q, $rootScope) {   

    return {       
        priority:1,
        restrict: "E",
        transclude:false,
        scope: { /* isolated scope */ },
        controller: function($scope) {
        $scope.message = "";

        $scope.sayAgain = function() {
            return  "one more message";
        };

        $scope.sayAgain(); // this doesn't work as well
    },
    template: "<div>{{sayAgain()}}</div>",
    link: function (scope, elem, attrs, ctrl) {}
    }
});