2015-10-08 86 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/

相关问题