0

with からデータバインディングを使用して値を取得するのはなぜですか?{{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値が定義されていない場所を除いてすべてがページで機能します。

アップデート

これは私のサービスがどのように見えるかです

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;

});
4

2 に答える 2

1

関数を呼び出します: $scope.init();

コードの init 関数では、初期化コントローラーで実行しないでください。手動で呼び出す必要があります。

于 2013-08-23T11:57:34.867 に答える
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);
});
于 2013-08-23T12:55:50.937 に答える