无法将$ scope variable / ng-model bound变量作为参数传递给工厂函数

时间:2015-06-11 23:15:21

标签: javascript angularjs parameter-passing

我的问题:我有一个输入供用户输入新的推文发布到Twitter。但是,在ng-click之后执行函数postTweet()时,$ scope.newStatus在到达工厂时似乎是空的。 (如console.log中所示)。在尝试传递$ scope.newStatus作为postTweet工厂函数的status参数时,我做错了什么?

旁注。如果我在控制器中定义$ scope.newStatus ='testing 123',它可以正常工作。

非常感谢所有帮助。

<input type="text" ng-model="newStatus" placeholder="enter new tweet"> {{newStatus}}
<button ng-click="postTweet()">

工厂:

'use strict';
angular
    .module('m01-profile')
    .factory('Profile', [
        '$http', '$q', 'apiRef', 'Authentication', 
        function($http, $q, apiRef, Authentication) {

        var authentication = Authentication.data.authData;

        var service = {
          postTweet: function(newStatus){

            console.log(newStatus);

            var deferred = $q.defer();

            var requestObject = {
              headers: { 'Content-Type' : 'application/json' },
              token: authentication.twitter.accessToken,
              tokenSecret: authentication.twitter.accessTokenSecret,
              status: newStatus
            };

            $http.post(apiRef + 'twitter/update_status', requestObject)
              .success(function(data, status, headers, config) {

                deferred.resolve(newStatus);

              }).
              error(function(data, status, headers, config) {
                deferred.reject('Unable to post new status to twitter');

              });                    

            return deferred.promise;  

          }



        };  

        return service;

}]);

控制器

'use strict';
angular
    .module('m01-profile')
    .controller('ProfileController', [
        '$scope', '$log', 'Profile',
        function($scope, $log, Profile) {

        $scope.postTweet = function(){

          Profile.postTweet($scope.newStatus).then(function(success){

          }, function(error){


          });                                        

        };

    }
]);

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

<强>控制器:

'use strict';
angular
    .module('m01-profile')
    .controller('ProfileController', ['$scope', '$log', 'Profile',
        function($scope, $log, Profile) {
        $scope.tweet = {
            newStatus = ''
        };

        $scope.postTweet = function(){
          Profile.postTweet($scope.tweet.newStatus).then(function(success){

          }, function(error){

          });                                        
        };
    }
]);

<强> HTML:

<input type="text" ng-model="tweet.newStatus" placeholder="enter new tweet"> {{newStatus}}
<button ng-click="postTweet()">

正如有人已经评论过,为了获得角度的双向数据绑定,您需要将ng-model绑定到对象属性而不是字符串原语。

在原始代码中,input并未更新$scope.newStatus变量,因为ng-model已绑定到字符串原语。