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) {}
}
});