为什么我在控制器中的变量未定义,但它在带有数据绑定的HTML页面中正确显示

时间:2013-08-23 11:35:28

标签: javascript angularjs

为什么我使用{{myItem}}获取数据绑定的值,但是当我尝试分配一个新变量时,我得到或输出到控制台我得到undefined

这是我的控制者:

var controllers = angular.module("myItem.controllers", []);
controllers.controller('myItemController', function ($scope, MyItemService) {
    $scope.version_model = null;
    $scope.itemGroup_model = null;
    $scope.item_model = null;

    $scope.myItem = null;
    $scope.versions = null;
    $scope.itemGroups = null;
    $scope.hierarchies = null;

    $scope.init = function () {

        $scope.myItem = MyItemService.getMyItem();
        console.log("myItem => id= " + $scope.myItem.versionID + " requestTypeID: " + $scope.myItem.requestTypeID);
        $scope.versions = MyItemService.getVersions();
        $scope.version_model = $scope.myItem.versionID;
        console.log("version_model :" + $scope.version_model + "scope.myItem.versionID : " + $scope.myItem.versionID);

        $scope.itemGroups = MyItemService.getItemGroups();
        $scope.itemGroup_model = $scope.myItem.itemGroup;
        console.log("itemGroup_model :" + $scope.itemGroup_model + " scope.myItem.itemGroup : " + $scope.myItem.itemGroup);

        $scope.hierarchies = MyItemService.getItemList($scope.itemGroup_model);
        $scope.item_model = $scope.myItem.itemName;
        console.log("item_model :" + $scope.item_model + " scope.myItem.itemName : " + $scope.myItem.itemName);
    }

    $scope.getItems = function (group) {
        $scope.hierarchies = MyItemService.getHierarchyList(group);
    }

每当我尝试从$ scope.myitem分配任何内容时,我都会一直未定义。我已经尝试在init内部设置,在init外面,一切都在我的页面上工作,除了_model值未定义的地方,一旦我与someting交互并且它得到更新一切正常,只是不在初始化< / p>

更新

这就是我的服务看起来像

angular.module('servicefactories', [])
    .factory('MyItemService', function ($http, $q) {
    obj.getMyItem= function () {
        var mypromise = $q.defer();
        $http.get('getforEdit')
            .success(function (data, status, headers, config) {
            mypromise.resolve(data);
        });

        return mypromise.promise;
    }

    return obj;

});

2 个答案:

答案 0 :(得分:1)

打电话给你的功能: $ scope.init();

在您的代码中,init函数不会在初始化控制器上运行。你必须手动调用它。

答案 1 :(得分:1)

我怀疑这是异步调用的问题。您可以使用承诺上的then方法访问数据,并在数据来自服务器时进行分配。像

这样的东西
MyItemService.getMyItem().then(function(data) {
         $scope.myItem=data;
         console.log("myItem => id= " + $scope.myItem.versionID + " requestTypeID: " + $scope.myItem.requestTypeID);
        $scope.versions = MyItemService.getVersions();
        $scope.version_model = $scope.myItem.versionID;
        console.log("version_model :" + $scope.version_model + "scope.myItem.versionID : " + $scope.myItem.versionID);
});