角度范围变量在html页面上可用,但不在控制器上?

时间:2014-07-18 11:29:53

标签: javascript angularjs angularjs-directive angularjs-scope angular-ui-bootstrap

我想知道是否有人可以帮助我我已经创建了一个新指令,因此我可以在从webServer加载数据时过滤下拉列表。一切正常,我可以使用{{ myValue }}将值写入HTML页面,我甚至可以在输入上使用ng-model,并返回值。

但出于某种原因,如果我尝试通过控制器访问变量$scope.myValueundefined

我创建了一个plunker(不会从webServer加载数据,而只是加载基本的列表值),但这似乎有效,而我的项目没有,我没有得到,因为我从中复制了我的项目!。

如果有人有任何想法,我真的很感激听到他们。

Plunker

在我的页面上我有

<div search-dropdown text="myText" value="myValue"></div>

指令是

<div class="btn-group searchDropdown">
    <button type="button" class="btn btn-default">
        <input search-dropdown-input type="text" placeholder="Enter name to search..." ng-model="filterText" ng-change="filter();" />
    </button>
    <button search-dropdown-toggle type="button" class="btn btn-default dropdown-toggle">
        <span class="caret"></span>
        <span class="sr-only">Split button!</span>
    </button>
    <ul class="dropdown-menu" role="menu">
        <li ng-repeat="item in items"><a href="javascript:void(0);" ng-click="selectItem($index);">{{ item.name }}</a></li>
    </ul>
</div>

2 个答案:

答案 0 :(得分:0)

您说您是从webServer加载的,可能是您在将后端数据分配给它之前尝试使用该变量吗?

我建议使用类似的东西:

$scope.$watch("myValue", function (newVal) {console.log(newVal);})

或:

$timeout(function () {console.log($scope.myValue);}, 5000)

这个想法是在后端AJAX请求完成后打印变量值。它将打印正确的值,而不是使用$watch函数,以及在变量具有预期值后需要对变量执行的操作。

答案 1 :(得分:0)

似乎一切都很好。唯一的区别是我的角度版本。

为了修复我的版本,我使用了一个对象来传递给我的指令而不是两个单独的变量。

所以现在我的指令属性就像这样填充

Text="myObj.text" value="myObj.value"

我想&#34;参考&#34;变量以某种方式丢失了?

之前有过类似的问题,建议这样做。我在这里发帖后才记得。希望这有助于其他人