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是一个常数呢?