2015-10-08 108 views
0

我想使用angular的ng模型來存儲它的值,並使用ng-click將值傳遞給控制器​​。用我目前的代碼,我總是收到未定義的值。我做錯了什麼?AngularJS - 無法從ng模型中獲取值到控制器

HTML

<ion-content> 
    <div class="list"> 
     <label class="item item-input"> 
      <textarea ng-model="feed.status"></textarea> 
     </label> 
    </div> 
</ion-content> 

<div class="tabs tabs-icon-left"> 
    <a class="tab-item" ng-click="post(feed)"> 
     <i class="icon ion-arrow-right-b"></i> 
    </a> 
</div> 

的JavaScript - 控制器

.controller("PostController", function($scope, $http, $localStorage, $location){ 
    $http.get("https://graph.facebook.com/v2.2/me", { params: { access_token: $localStorage.accessToken, fields: "id, location, picture", format: "json" }}).then(function(result) { 
     $scope.profileData = result.data; 
     console.log(result.data); 
    }, function(error) { 
     alert("There is a problem with your profile"); 
     console.log(error); 
    }); 

    $scope.post = function(data){ 
     console.log(data); 
    } 
}); 

路線

.config(function($stateProvider, $urlRouterProvider) { 
$urlRouterProvider.otherwise('/feeds') 

$stateProvider 
    .state('login', { 
     url: '/', 
     templateUrl: 'templates/login.html', 
     controller: 'LoginController' 
    }) 
    .state('profile', { 
     url: '/profile', 
     templateUrl: 'templates/profile.html', 
     controller: 'ProfileController' 
    }) 
    .state('feeds', { 
     url: '/feeds', 
     templateUrl: 'templates/feeds.html', 
     controller: 'FeedsController' 
    }) 
    .state('post', { 
     url: '/post', 
     templateUrl: 'templates/post.html', 
     controller: 'PostController' 
    }) 
}) 
+0

發佈您的控件的完整代碼ller – harishr

+0

@entre,當然。更新 –

+0

你的HTML中聲明瞭'ng-controller'在哪裏? – LionC

回答

3

正如在評論中提到的,我相信你的問題是與範圍有關。 ion-content指令可能使用了一個獨立的範圍,因此在其中設置一個值不會影響範圍外的範圍。

解決此類問題(以及更多)的一種方法是使用控制器作爲語法。

這可能發生的另一個原因是沒有人正在初始化提要對象。如果Feed未定義,則不能只執行feed.status ='sth'。您需要先初始化供稿。

嘗試做這樣的事情:

.state('post', { 
     url: '/post', 
     templateUrl: 'templates/post.html', 
     controller: 'PostController', 
     controllerAs: 'vm' 
    }) 

,並在你的控制器:

.controller("PostController", function($http, $localStorage, $location){ 
    var vm = this; 
    vm.feed = {}; //initialise feed object 
    $http.get("https://graph.facebook.com/v2.2/me", { params: { access_token: $localStorage.accessToken, fields: "id, location, picture", format: "json" }}).then(function(result) { 
     vm.profileData = result.data; 
     console.log(result.data); 
    }, function(error) { 
     alert("There is a problem with your profile"); 
     console.log(error); 
    }); 

    vm.post = function(data){ 
     console.log(data); 
    } 
}); 

,並在您的模板嘗試:

<div> 
<ion-content> 
    <div class="list"> 
     <label class="item item-input"> 
      <textarea ng-model="vm.feed.status"></textarea> 
     </label> 
    </div> 
</ion-content> 

<div class="tabs tabs-icon-left"> 
    <a class="tab-item" ng-click="vm.post(vm.feed)"> 
     <i class="icon ion-arrow-right-b"></i> 
    </a> 
</div> 
</div> 

,讓我們知道,如果它的工作原理

+0

從我從鏈接中讀取的內容來看,controllerAs語法確實是一個很好的幫助。從來沒有使用它,但從這一刻起,我會做。謝謝,它的作品! –

+0

嗨,我實際上在Ionic中發現了一個使用controllerAs語法的問題。目前有一個可以在這裏查看的錯誤。 https://github.com/driftyco/ionic/issues/3058。臨時解決方案knwon是控制器:'PostController as vm'。 –

0

我覺得如果你在ng-controller包裹你的一切代碼應工作:

<div ng-controller="MyController"> 
    <!-- your HTML here --> 
</div> 

檢查出來上的jsfiddle:http://jsfiddle.net/gmy6gd8z/

相關問題