【问题标题】:Why can`t i use a $scope value inside my controller if i can use it in my html page?如果我可以在我的 html 页面中使用它,为什么我不能在我的控制器中使用 $scope 值?
【发布时间】:2016-11-21 16:43:37
【问题描述】:

我有一个使用 angularJs 的表单,我主要关心的是带有 ng-option 的选择标签 让我快速浏览一下表格,然后将解释我的问题。 注意:我删除了不必要的部分,例如 div 和 classes,因为这不是 leyout 问题。

<form role="form" name="feedbackForm" ng-submit="sendFeedback()" novalidate>
<!-- ---------------- SELECT ------------------->
    <label>
        <input type="checkbox" name="approve" value="" ng-model="feedback.agree">
        <strong>May we contact you?</strong>
    </label>
    <div ng-show="feedback.agree"  ng-model="feedback.myChannel">
        <select class="form-control c-select" name="select" ng-model="feedback.myChannel" ng-options="channel.value as channel.label for channel in channels">
            <option value="">Select a method</option>
        </select>
    </div>
    <!-- --------------------TEEPHONE ---------------------->
    <label for="telnum">Contact Tel.</label>
    <input type="tel" id="areacode" name="areacode" ng-model="feedback.tel.areacode">
    <input type="tel" id="telnum" name="telnum" ng-model="feedback.tel.number">
    <!-- -------------  EMAIL ------------------------>
    <label for="emailid" class="col-sm-2 control-label">Email</label>
    <div class="col-sm-10">
    <input type="email" id="email" name="email" ng-model="feedback.email" >

然后我在下面显示我的值只是为了开发目的

<p> Contact by: {{ feedback.myChannel }} </p>
<p> feedback.agree: {{'( ' +  feedback.agree  + ' )'}} </p>
<p> feedback.myChannel: {{'( ' +  feedback.myChannel  + ' )'}} </p>

在控制器和 ng-option 我有:

$scope.channels = [ 
    { value:"Tel", label:"Tel" },
    { value:"Email", label:"Email" },
    { value:"Tel & Email", label:"Tel & Email" } 
];

然后为了向服务器推送反馈,我正在创建这个对象:

$scope.feedback = { myChannel:"", firstName: '', lastName: '', agree: false, email: '' };

这里有一些图片显示所有这些变量和值都已正确提供给站点。

我的问题是: 我正在尝试使用$scope.feedback.myChannel 来满足其他需求,但我在我的控制器上找不到,而我在我的表单中使用它。

这条线什么也没有。也许是一个空字符串:

console.log('myChannel = ' + $scope.feedback.myChannel);

所有这些 if s 都不起作用并且控制台中没有任何显示:

if($scope.feedback.myChannel == "Tel" || $scope.feedback.myChannel === "Tel & Email"){
    console.log($scope.feedback.myChannel);
};
if($scope.feedback.myChannel === "Email" || $scope.feedback.myChannel === "Tel & Email"){
    console.log($scope.feedback.myChannel);
};

这个没有做它应该做的事情:

if(!$scope.feedback.agree){ $scope.feedback.myChannel = ''; };

这个 console.log 给出了意想不到的值:

console.log('1: ' + $scope.feedbackForm.myChannel)  // undefined
console.log('2: ' + $scope.feedback.myChannel);     // nothing .. perhaps an empty string

【问题讨论】:

  • 从这里删除ng-model:&lt;div ng-show="feedback.agree" ng-model="feedback.myChannel"&gt;
  • 好吧,我刚做了..还是一样。
  • 提供plnkr.co/edit并将您的完整代码复制到那里,然后我们可以更好地查看。
  • 好的,会的。但是现在你能告诉我如何接受你对我的问题的编辑吗?或者它会被网站添加?谢谢.. 我也上传了大约 5 张照片,但我看到只有一张是重复的。
  • 你认为我的 ng-options 写得对吗?

标签: angularjs forms validation


【解决方案1】:

好吧,根据你的plnkr,你正在清理你的object,然后你尝试做一个console.log(),当然它会是一个空字符串。

还有:

console.log('1: ', $scope.feedbackForm.myChannel)

是undefined,因为在你的表单中没有tag和这个name,调用select(因为你把它命名为name="select"),你应该如下:

console.log('1: ', $scope.feedbackForm.select)

工作中 DEMO.

【讨论】:

  • 当你说我正在清理我的物品时,你是什么意思?
  • 我实际上初始化了一个空对象,然后当 select 取值时该对象被填充。这是我的理解..在提交时我再次清空,因为我想要一个干净的表单提交..如果不清楚,请告诉我。
  • 顺便说一句..你的 plunker 没有像我预期的那样显示控制台内的值。
  • 好吧,正如我所说,您将对象的所有属性设置为'',然后您尝试console.log()您的变量..如果您清理它,它如何显示您的值???另外,它怎么能不显示您期望的值?如果你想在你的select中只看到选中的选项..然后改成consle.log(feedback.myChannel)就没有问题了。
  • 谢谢 .. 我如何清空我的对象实际上将它创建为一个空对象,它应该从表单本身获取它的值。当我 console.log .. 我现在它将是空字符串但我的问题是 .. 在我选择表单上的一个选项后为什么 $scope.veedback.myChannel 在它显示在 html 的右侧时仍然为空你可以看到的页面
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-19
  • 2020-08-01
  • 2020-06-10
  • 1970-01-01
  • 1970-01-01
  • 2019-06-02
  • 2013-05-26
相关资源
最近更新 更多