Angularjs 是否未设置指令默认范围值?
我想像这样在指令中设置默认值,但它将为nullAngularjs 是否未设置指令默认范围值?,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我想像这样在指令中设置默认值,但它将为null (function(angular) { 'use strict'; angular.module('docsTransclusionExample', []) .controller('Controller', ['$scope', function($scope) { }]) .directive('myDialog', function() { return { restrict: 'E',
(function(angular) {
'use strict';
angular.module('docsTransclusionExample', [])
.controller('Controller', ['$scope', function($scope) {
}])
.directive('myDialog', function() {
return {
restrict: 'E',
transclude: true,
scope: {
name: '=?'
},
templateUrl: 'my-dialog.html',
link: function (scope, element) {
},
controller: function($scope) {
$scope.name = 'Tobias';
}
};
});
})(window.angular);
检查演示:
因为在调用该指令时,不会传入binding属性
将名称
绑定到指令:
<my-dialog name="name">Check out the contents, {{name}}!</my-dialog>
检查内容,{{name}!
因为您使用的是transclude:true
。Angular将为(transclude scope
)转包内容创建一个单独的范围,即,签出内容,{{name}代码>。此作用域通常是从父作用域继承的,它是独立作用域的同级。因此这里{{name}}
没有访问隔离作用域上的名称。相反,它正在访问transclude作用域
(并向上游遍历到其父作用域,在那里您不设置名称
)
使用…
将在父作用域中创建名称
属性,并将双向
绑定到指令。这样,更改指令内的值也会更改指令外的值。检查演示:
因为在调用该指令时,不会传入binding属性
将名称
绑定到指令:
<my-dialog name="name">Check out the contents, {{name}}!</my-dialog>
检查内容,{{name}!
因为您使用的是transclude:true
。Angular将为(transclude scope
)转包内容创建一个单独的范围,即,签出内容,{{name}代码>。此作用域通常是从父作用域继承的,它是独立作用域的同级。因此这里{{name}}
没有访问隔离作用域上的名称。相反,它正在访问transclude作用域
(并向上游遍历到其父作用域,在那里您不设置名称
)
使用…
将在父作用域中创建名称
属性,并将双向
绑定到指令。这样,更改指令内的值也会更改指令外的值。冲突范围
您有一个问题,因为您有一个转移范围和一个隔离范围冲突。删除scope:{name:'='}
以在控制器作用域上插入name
。除非需要防止范围继承父范围或与父范围冲突,否则通常不需要隔离范围
如果需要隔离指令的作用域,则不要删除上述内容,将name属性添加到元素中,并将其设置为要使用的scope属性:name=“name”
鉴于以下情况:
scope: {
name: '='
}
这意味着您将双向绑定到元素的name
属性中定义的scope属性,并在隔离scope上调用它的名称。如果您说somename:'=thatName'
,那么您将两个绑定到thatName
属性,但在隔离范围中将其称为“somename”
在双向绑定中,指令作用域的更改将影响父作用域。如果要单向绑定(更改不会影响父级),可以使用name:'@'
,如果要绑定到name属性的值,可以使用name:'&'
冲突作用域
您有一个问题,因为您有一个转移范围和一个隔离范围冲突。删除scope:{name:'='}
以在控制器作用域上插入name
。除非需要防止范围继承父范围或与父范围冲突,否则通常不需要隔离范围
如果需要隔离指令的作用域,则不要删除上述内容,将name属性添加到元素中,并将其设置为要使用的scope属性:name=“name”
鉴于以下情况:
scope: {
name: '='
}
这意味着您将双向绑定到元素的name
属性中定义的scope属性,并在隔离scope上调用它的名称。如果您说somename:'=thatName'
,那么您将两个绑定到thatName
属性,但在隔离范围中将其称为“somename”
在双向绑定中,指令作用域的更改将影响父作用域。如果要单向绑定(更改不会影响父级),可以使用name:'@'
,如果要绑定到name属性的值,可以使用name:'&'
知道为什么不隐藏此文本吗?:知道这篇文章为什么不隐藏吗