Angularjs 使用“时如何替换隔离作用域的值”@&引用;对于Angular 1.4指令上的文本属性?(适用于角度1.3)

Angularjs 使用“时如何替换隔离作用域的值”@&引用;对于Angular 1.4指令上的文本属性?(适用于角度1.3),angularjs,angularjs-directive,angularjs-scope,Angularjs,Angularjs Directive,Angularjs Scope,我想在html中使用属性作为字符串。所以我不需要再使用任何范围变量。 我的问题实际上是定义一些默认值。但我意识到,当我在Angular中使用“@”时,我不能在Angular 1.4中改变这个值,我可以使用1.3 使用文本属性(@)时,是否有方法定义Angular 1.4指令的默认值 我尝试过在compile、compile-Pre和Pos、link和controller上替换我的值,但没有替换 我可以改为使用“=”并将属性定义为字符串,但这实际上是“糟糕的”: 等式 带角度1.3.1工作的插入

我想在html中使用属性作为字符串。所以我不需要再使用任何范围变量。 我的问题实际上是定义一些默认值。但我意识到,当我在Angular中使用“@”时,我不能在Angular 1.4中改变这个值,我可以使用1.3

使用文本属性(@)时,是否有方法定义Angular 1.4指令的默认值

我尝试过在compile、compile-Pre和Pos、link和controller上替换我的值,但没有替换

我可以改为使用“=”并将属性定义为字符串,但这实际上是“糟糕的”:
等式

带角度1.3.1工作的插入器连杆:

该代码段使用的是Angular 1.4

(函数(){
"严格使用",;
angular.module('myApp',[])
.directive('ribbon',function(){
返回{
限制:'E',
替换:正确,
范围:{
标题:“@”,
副标题:“@”
},
模板:“{{title}}{{{subtitle}}”,
控制器:功能($scope){
$scope.title=$scope.title | |‘Ribbon’;
$scope.subtitle=$scope.subtitle | |'默认';
}
};
});
})();

  • 我有一个
  • 我有一个
  • 我有一个

我不确定这是一个突破性的改变还是angular 1.4版本的错误。但是,您可以使用稍微不同的方法来解决此问题

1) 推迟默认分配。因为看起来即使您在作用域上设置了值,(控制器实例化首先发生)在后链接阶段的某个地方,它也会被绑定的值(此处没有未定义的值)覆盖。您可以使用

  $scope.$evalAsync(function(){
       $scope.title = $scope.title || 'Ribbon';
       $scope.subtitle = $scope.subtitle || 'Default';
  });
2) 使用不带绑定的独立作用域(
scope:{}
)(这样就不会因为添加属性而污染其父作用域)或子作用域
scope:true
,并在静态绑定属性时从属性中读取值

  $scope.title = attr.title || 'Ribbon';
  $scope.subtitle = attr.subtitle || 'Default';

看起来这是Angular 1.4.4中修复的错误

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.min.js"></script>


看起来好像有问题,不知道这是不是一个突破性的改变。如果使用
作用域异步分配它,$evalAsync
,看起来很好。更像是在指令呈现时以及在postLink阶段之后,值被覆盖。非常感谢@PSL。这正是我想要的。我不知道scope的存在。$evalAsync。我会研究的。工作得很有魅力。顺便说一下,你也可以这样做。令人惊叹的。我以前尝试过使用attrs方法,但是我没有创建空的作用域,所以不起作用。我们需要对它进行更多的研究。再次感谢!真不错@PSL!写下两种方法的答案。