Angularjs 访问模板中的注入内容
如果我想做这样愚蠢的事:Angularjs 访问模板中的注入内容,angularjs,Angularjs,如果我想做这样愚蠢的事: foo = bar:'awesome bar' app.constant "foo", foo {{foo.bar} 是否可以在不将其放入$scope的情况下访问foo?否,$scope是模板与其控制器之间的“粘合剂”。如果您正在注入foo,并希望它可以直接用于模板,则必须将其置于$scope中 这也适用于指令的链接和控制器功能。否,$scope是模板与其控制器之间的“粘合剂”。如果您正在注入foo,并希望它可以直接用于模板,则必须将其置于$scop
foo =
bar:'awesome bar'
app.constant "foo", foo
{{foo.bar}
是否可以在不将其放入
$scope
的情况下访问foo
?否,$scope
是模板与其控制器之间的“粘合剂”。如果您正在注入foo
,并希望它可以直接用于模板,则必须将其置于$scope
中
这也适用于指令的
链接
和控制器
功能。否,$scope
是模板与其控制器之间的“粘合剂”。如果您正在注入foo
,并希望它可以直接用于模板,则必须将其置于$scope
中
这也适用于指令的
链接
和控制器
功能。假设“foo”是一个应用程序常量,您可以将其注入指令并在模板函数中使用:
app.directive('test', function(foo) {
return {
restrict: 'A',
template: function() {
return foo.bar;
}
}
});
HTML
<div ng-controller='ctrl' test>
</div>
这将导致:
<div ng-controller='ctrl' test>
awesome bar
</div>
棒极了
假设“foo”是一个应用程序常量,您可以将其插入指令中,并在模板函数中使用它:
app.directive('test', function(foo) {
return {
restrict: 'A',
template: function() {
return foo.bar;
}
}
});
HTML
<div ng-controller='ctrl' test>
</div>
这将导致:
<div ng-controller='ctrl' test>
awesome bar
</div>
棒极了
是的,使用controllerAs语法是可能的,不过您仍然需要在某些内容上添加foo
<div ng-controller='ctrl as ctrl'>
{{ctrl.foo.bar}}
</div>
是的,使用controllerAs语法是可能的,尽管您仍然需要在某些内容上添加
foo
<div ng-controller='ctrl as ctrl'>
{{ctrl.foo.bar}}
</div>
另外,值得一提的是,$rootScope偶尔用于此目的,因为模板表达式可以沿着作用域链查找内容。在很多情况下,这是非常糟糕的编程实践。。。除了一些。以下是我发现的一些有意义的方法:
- Angular ui router文档建议将$state和$stateParams放入$rootScope中。它们在任何地方都被使用,所以它不一定是邪恶的,因为这绝对是一个全球性的单例服务,在整个应用程序中具有相同的功能
- 如果你在应用程序范围内有几个常量(我不想要几百个),你只需要通过不断地将它们设置到你制作的每个控制器(例如,一个页面范围的变量,将你的应用程序指向一个开发、QA或生产框?)来将它们沿着范围链传递下去。。。假装这其中的任何部分对某个范围来说都是“本地”的价值很低。所有的软件开发都是一种妥协。我认为减少的维护开销和方便性可能会使这一次值得
在这两种情况下,您仍然在某个地方有那行代码(通常在您的主控制器或最上面的控制器中)。。。但至少你只有一次 另外,值得一提的是,$rootScope偶尔用于此目的,因为模板表达式可以沿着作用域链查找内容。在很多情况下,这是非常糟糕的编程实践。。。除了一些。以下是我发现的一些有意义的方法:
- Angular ui router文档建议将$state和$stateParams放入$rootScope中。它们在任何地方都被使用,所以它不一定是邪恶的,因为这绝对是一个全球性的单例服务,在整个应用程序中具有相同的功能
- 如果你在应用程序范围内有几个常量(我不想要几百个),你只需要通过不断地将它们设置到你制作的每个控制器(例如,一个页面范围的变量,将你的应用程序指向一个开发、QA或生产框?)来将它们沿着范围链传递下去。。。假装这其中的任何部分对某个范围来说都是“本地”的价值很低。所有的软件开发都是一种妥协。我认为减少的维护开销和方便性可能会使这一次值得
在这两种情况下,您仍然在某个地方有那行代码(通常在您的主控制器或最上面的控制器中)。。。但至少你只有一次 如果您想监视“foo”,那么它必须存在于作用域中。如果您想将其硬编码或动态插入模板(但不需要监视),您可以从自定义指令内部,并提供模板函数。不,我不希望被“监视”,这是一个常量。请参阅更新的问题如果要监视“foo”,则它必须存在于范围中。如果您想将其硬编码或动态插入模板(但不需要监视),您可以从自定义指令内部,并提供模板函数。不,我不希望被“监视”,这是一个常量。见更新的问题嘿。。。如果foo是常数呢?嘿。。。如果foo是一个常数呢?