Javascript angularjs指令隔离作用域
根据这一点,我有一个指令和一个控制器(主要来自AngularJS指令PacktPub书)Javascript angularjs指令隔离作用域,javascript,angularjs,Javascript,Angularjs,根据这一点,我有一个指令和一个控制器(主要来自AngularJS指令PacktPub书) angular.module('myApp',[]) .directive('myIsolatedScopedDirective',function(){ 返回{ 范围:{ “标题”:“@msdTitle” }, 链接:函数($scope、$element、$attrs){ $scope.setDirectiveTitle=函数(标题){ $scope.title=标题; }; } }; }) .contr
angular.module('myApp',[])
.directive('myIsolatedScopedDirective',function(){
返回{
范围:{
“标题”:“@msdTitle”
},
链接:函数($scope、$element、$attrs){
$scope.setDirectiveTitle=函数(标题){
$scope.title=标题;
};
}
};
})
.controller('MyCtrl',函数($scope){
$scope.title=“你好世界”;
$scope.setAppTitle=函数(标题){
$scope.title=标题;
};
});
{{title}}
升级我!
{{title}}
鲍勃!
问题如下:
为什么{{title}}
的计算结果为“Hello World”
,为什么不“我是应用程序Hello World中的一个指令”
?
有人能解释一下吗?
多谢各位
原因是,您必须在指令的
template
属性中输入模板,使其成为独立的模板。现在,该指令创建了一个独立的作用域,但它不会在任何地方使用它,因为在触发该指令的链接函数时,您的指令标记内的内容已经在父作用域(MyCtrl)中进行了计算
这可能就是我们想要做的
指令
.directive('myIsolatedScopedDirective', function(){
return {
scope : {
'title' : '@msdTitle'
},
replace: true,
template: '<div><h4>{{title}}</h4>' +
'<button ng-click="setDirectiveTitle(\'bob\')">Bob it!</button>',
link: function ($scope, $element, $attrs) {
$scope.setDirectiveTitle = function (title) {
$scope.title = title;
};
}
};
指令('myIsolatedScopedDirective',函数(){
返回{
范围:{
“标题”:“@msdTitle”
},
替换:正确,
模板:“{{title}}”+
“鲍勃!”,
链接:函数($scope、$element、$attrs){
$scope.setDirectiveTitle=函数(标题){
$scope.title=标题;
};
}
};
标记
<div my-isolated-scoped-directive msd-title="I'm a directive within the app {{title}}"></div>
谢谢。然后我认为那本书是一堆废话……所以没有办法将指令“content”/innerHTML(所以不是从模板生成的那一个)绑定到指令的隔离范围?可能是使用transclude?我还没有尝试过,但transclude也应该这样做
<div my-isolated-scoped-directive msd-title="I'm a directive within the app {{title}}"></div>