无法从投入中获得价值

时间:2016-02-21 14:19:19

标签: angularjs

我正在使用ui-router,并且有这样的状态;

.state('add', {
            url: '/add',
            views: {
                "list@home.main": {
                    templateUrl: 'add.html',
                    controller: "AddController",
                    controllerAs: 'ctrl'
                }
            }

        })

在我的模板中我有这个;

<input type="text" ng-model="ctrl.product.title" name="title" required>

在我的控制器中,我想从输入字段中获取值。

myApp.controller('myController', function myController($scope, $rootScope, Incident, $state, $stateParams) {
    var vm = this;
    vm.product = new Product();

    var myValue = vm.product.title;
});

但myValue总是空的。我错过了什么?

(Product()是;)

myApp.factory('Product', function ($resource) {
        return $resource('http://api.com/api/products/:id', { id: '@id' }, {
            update: {
                method: 'PUT'
            }
        });
    });

1 个答案:

答案 0 :(得分:0)

如果您想从后端加载产品然后检查标题,您想要完成什么:

Product是一种资源。您应该像Product.get({ id: 3 })一样使用它来获取实际产品 - 产品将作为承诺返回,因此您可以使用product.$promise.then(...)或仅将其分配给变量(angularjs将足够智能以从承诺中进行绑定) :

Product.get({id:123})
    .$promise.then(function(product) {
      $scope.product = product;
      // product.title should be usable here
    });

资源是一个复杂的主题,这里有一个教程:https://devdactic.com/improving-rest-with-ngresource/

如果您想在客户端阅读product.title,那么您太早了。 如果您使用form,则使用ngSubmit绑定提交事件,并在处理程序内读取product.title值。如果您在控制器构造函数中访问该变量,则用户无法更改任何内容,因此它必须为空。如果您想要监控product.title更改,请在输入或ng-change上使用$watch(product.title, function() { })指令,但我认为在您的情况下ng-submit就足够了。