角度 - 控制器为vm

时间:2015-11-22 18:21:30

标签: javascript angularjs controller

试图养成使用控制器作为语法的习惯,但在尝试一个简单的例子时似乎缺少一些东西。

尝试设置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>

4 个答案:

答案 0 :(得分:0)

不确定您是否使用超过1.3的角度版本,这是工作Plunker

你的HomeController应该像这样改变,

app.controller("HomeController", function(){
    this.name="Richard";
});

答案 1 :(得分:0)

使用$ 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>

请阅读this文章!!!

答案 2 :(得分:0)

您需要在$ scope对象上声明变量以实现双向绑定。否则它只是一个常规的javascript变量。范围就像是视角和控制器之间的胶水。Read Here

答案 3 :(得分:0)

我唯一能看到的问题是你没有包含ngRoute模块...

 var app = angular.module('plunker', [
  'ngRoute'
 ]);

或您的dataservice不包含在使注入失败的脚本中。根据您所包含的信息,我使用视图模型概念而不是$ scope为您创建了一个工作plunkr

Heres angulars最佳做法,其中包含一些非常有用的信息和使用视图模型概念的示例,并附有大量其他信息Angular Guide