Angular-控制器作为vm
Angular - Controller as vm
试图养成使用控制器作为语法的习惯,但在尝试一个简单的示例时似乎缺少了一些东西。
当尝试设置类似vm.name="John"的属性时,当使用{{vm.name}}时,它不会显示在我的视图中。
代码是这样
控制器
(function() {
'use strict';
angular
.module('myApp')
.controller('HomeController', HomeController);
HomeController.$inject = ['dataService'];
function HomeController(dataService) {
var vm = this;
vm.data = {};
vm.name = 'Richard';
}
路由
'use strict';
angular
.module('myApp')
.config(function($routeProvider) {
$routeProvider.when(
'/view1',
{
templateUrl: 'partials/partial1.html',
controller: 'HomeController',
controllerAs: 'vm'
});
$routeProvider.when(
'/view2',
{
templateUrl: 'partials/partial2.html'
});
$routeProvider.otherwise(
{
redirectTo: '/view1'
});
});
查看
<p>View 1</p>
<h1>Hello {{ vm.name }}</h1>
不确定您使用的角度版本是否超过1.3,以下是正在工作的Plunker
你的家庭控制器应该像这样改变,
app.controller("HomeController", function(){
this.name="Richard";
});
使用$scope。我认为它会起作用。编写代码:
function HomeController(dataService) {
var vm = this;
vm.data = {};
vm.name = 'Richard';}
使用$scope,试试这个:
function HomeController($scope, dataService) {
$scope.data = {};
$scope.name = 'Richard';}
查看
<p>View 1</p>
<h1>Hello {{name}}</h1>
也请阅读这篇文章!!!
您需要在$scope对象上声明变量以实现双向绑定。否则它只是一个常规的javascript变量。范围就像angularjs中视图和控制器之间的粘合剂。阅读此处。
我唯一能看到的问题是你没有包含ngRoute模块。。。
var app = angular.module('plunker', [
'ngRoute'
]);
或者您的数据服务没有作为脚本包含,这会导致注入失败。根据您提供的信息,我使用视图模型概念而不是$scope为您创建了一个工作plunkr。
以下是angulars的最佳实践,其中有一些关于使用视图模型概念的非常有用的信息和示例,以及许多其他信息Angular Guide
相关文章:
- 在指令控制器中使用$attrs时出现问题
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 从控制器返回后Ajax启动事件激发
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- 如何在单击复选框后调用控制器方法
- 在控制器和数据对象之间同步数据
- 将Javascript数组发送到控制器ASP.NET MVC
- 角度控制器结构
- 如何在Jquery中发布后将值从视图返回到控制器
- 将值从html传递到AngularJS控制器
- 从我的控制器返回一个不同于200的代码以触发ajax错误,这被认为是一种好的做法吗
- 从控制器继承了隔离的作用域以生成可重用的指令
- Flash Uploadify在调用我的MVC控制器时没有保留会话/授权
- 为什么不't我的变量在我的控制器中填充后在我的视图中呈现
- 角控制器作为vm继承
- 控制器为vm,点击ng
- 使用 $scope.$apply 在 TypeScript 中使用控制器作为 vm 语法时
- Angular-控制器作为vm
- 使用'this'声明的变量var Vm = this"当使用指令访问时,在控制器中不反映值
- 无法使用 VM 绑定到范围.控制器/HTML 中的表示法