角度控制器$ scope.fId显示未定义的值

时间:2015-10-07 09:54:46

标签: javascript html angularjs controller onsen-ui

我想在角度控制器fId中使用输入FollowBtnCtrl值,我创建了一个调用followMe()函数的按钮,在FollowBtnCtrl控制器内定义,当我在控制器内获取$scope.fId值,显示未定义的值。请检查我的代码并告诉我我错在哪里,抱歉这个愚蠢的问题,但我是angularjs的新人。提前致谢

角度控制器:

.controller("FollowBtnCtrl", function ($scope) {
    $scope.followMe = function () {
        alert($scope.fId);
    }
});

Html代码:

<div ng-controller="FollowBtnCtrl">
    <ons-toolbar-button>
        <input ng-model="fId" id="fId" type="hidden" value="10" />
        <button ng-click="followMe()" class="followButton button button">
            Hello
        </button>
    </ons-toolbar-button>
</div>

3 个答案:

答案 0 :(得分:1)

ons-toolbar-button指令会创建另一个范围。您可以访问父followMe(),但父级无法访问该范围的已定义变量(fId)。 许多解决方案......这是一个:

ng-click="followMe(fId)"$scope.followMe = function(fId){...}

答案 1 :(得分:1)

你无法使用angular中的value属性为fId赋值。这是新Angular应用程序中的一个常见错误。如果可以避免,您不希望将值写入服务器上的HTML。事实上,如果你可以让你的服务器完全呈现HTML,那就更好了。

理想情况下,您希望发送Angular HTML模板,然后通过JSON中的$ http下拉您的值并将它们放在您的范围内。 但是如果你想通过html提供价值,你可以使用ng-init。

<input ng-model="fId" id="fId" type="hidden" ng-init="fId=10" />

另请参阅:AngularJS - Value attribute on an input text box is ignored when there is a ng-model used?

答案 2 :(得分:1)

ng-model用于双向绑定,即更改输入的值。

这就是为什么,您需要做的是删除输入的value属性并在控制器内初始化fId

您的意见:

<input ng-model="fId" id="fId" type="hidden" />

和您的控制人员:

.controller("FollowBtnCtrl", function ($scope) {
    $scope.fId = 10;

    $scope.followMe = function () {
       alert($scope.fId);
    }
});