💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# Angular 视图我们有了模块和控制器之后,内容和交互逻辑就已经基本确定了,接下来我们就得把它们展示给用户了,这时就用到“视图”(view)。CSS并不在Angular的范围内,在实践中,常常结合一套成熟的CSS架构来做,比如Bootstrap就可以和Angular结合得非常好。Angular中实现视图的主体是模板。最常见的模板形式当然是HTML,也有通过Jade等中间语言编译为HTML的。 模板中包括静态信息和动态信息,静态信息是指直接写死(hard code)在模板中的,而动态信息则是对scope中内容的展示。展示动态信息的方式有两种: * 绑定表达式:形式如{{username}},绑定表达式可以出现在HTML中的文本部分或节点的属性部分。 * 指令:形式如<span ng-bind="username"></span>,事实上任何指令都可以用来展示动态信息,展示的方式取决于指令的内在实现逻辑。视图中的绑定表达式或指令中用到的变量或函数都是$scope中的一个属性或方法,上面两个表达式绑定的都是$scope.username,但是也可以绑定到方法,如$scope.getFirstName()。绑定到方法是一种很常用的方式,但是如果使用不当,也可能导致一些很难追查的Bug。特别要注意不要在方法中返回一个新对象或新数组,否则会出现“10$digest iterations reached.”错误。 另一个要点是,在表达式中无法直接使用window对象下的全局属性或方法。Angular这样的设计可以确保视图的局部性,以免受到意料之外的干扰而出现Bug。如果确实需要调用,请在Controller中简单包装一层。除了展示信息之外,常常还需要对信息进行格式化,比如把一个Date对象格式化为“年-月-日”格式或“年-月-日 时:分:秒”格式。一个分层清晰的系统,在scope中通常是没有格式的概念的,想要显示成什么格式是视图层的事情。这样的设计可以提高Model层的内聚性(只做一件事),把与此相关的需求变更在视图层处理,可以提高Model层的稳定性。Angular中对信息进行格式化的机制是过滤器(Filter),如:{{birthday|date}}。