首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从$scope.$watch更新ui-select2 2内容

无法从$scope.$watch更新ui-select2 2内容
EN

Stack Overflow用户
提问于 2014-02-04 17:53:15
回答 2查看 1.3K关注 0票数 0

我的代码的简化版本如下:

代码语言:javascript
复制
var app = angular.module("App", ['ui.select2']);
app.controller("MainController", function ($scope) {

    $scope.select2Options1 = {
        data: [{id: 0, text: "Foo"}, {id: 1, text: "Bar"}]
    };

    $scope.select2Options2 = {
        data: []
    };

    $scope.$watch('chosen1', function (newVal, oldVal) {
        if (newVal !== undefined && newVal !== null) {
            console.log("Valid value selected: " + newVal);
            $scope.select2Options2.data.push({id: 0, text: "FooBar"});
        }
    });
});

标记:

代码语言:javascript
复制
<html>
<head>
    <link rel="stylesheet" href="bower_components/select2/select2.css">
    <script type="text/javascript" src="bower_components/jquery/jquery.js"></script>
    <script type="text/javascript" src="bower_components/select2/select2.js"></script>
    <script type="text/javascript" src="bower_components/angular/angular.js"></script>
    <script type="text/javascript" src="bower_components/angular-ui-select2/src/select2.js"></script>
    <script src="app.js"></script>
</head>

<body ng-app="App">
    <input ng-controller="MainController" ng-model="chosen1" ui-select2="select2Options1" style="width:100px">
    <input ng-controller="MainController" ng-model="chosen2" ui-select2="select2Options2" style="width:100px">

</body>
</html>

我想要做的是,当从另一个ui-select2 ($scope.select2Options1.data)中选择某些内容时,更新ui-select2 ($scope.select2Options1.data)的内容。

问题是,无论我在ui-select2的处理程序中做了什么,第二个$scope.$watch的内容都不会被更新。如果我将这个$scope.select2Options2.data.push({id: 0, text: "FooBar"});移出监视处理程序之外,它就能工作,第二个ui-select2就会被填充。这意味着,一定有什么根本的错误。

有什么建议怎么解决吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-05 15:51:45

造成这个问题的根本原因似乎是我两次在HTML中定义了MainController。用ng-控制器=“MainController”将所有内容封装在一个div中,就解决了这个问题。

票数 0
EN

Stack Overflow用户

发布于 2014-02-04 19:22:30

我相信你没有像建议的那样使用模块。请阅读https://github.com/angular-ui/ui-select2的文档。

在角度上启用<select>选项的方法是使用ng-options指令.然而,ui-select2 2并不完全支持这个指令,建议使用<option>标记。在你的情况下,应该是这样的:

代码语言:javascript
复制
<select ui-select2 ng-model="select2" data-placeholder="Pick a number">
    <option value=""></option>
    <option ng-repeat="item in select2Options2" value="{{item.id}}">{{item.text}}</option>
</select>

请注意,与使用ng-选项不同,通过ng-model存储的选定对象将是字符串表示,而不是实际的对象。这是在使用ui-select2 2时的一个限制。因此,请注意,chosen2中存储的是{{item.id}} (字符串)的值,而不是{id: 0, text: "Foo"}对象。

最后,为什么它在你的情况下部分起作用?原因是,您使用select2内部函数来生成选项。这就像初始化时一样正常工作,但是在这个select2options.data字段上没有设置手表(Select2不知道任何关于角的知识)。因此,初始化时存在的任何数据都会显示出来,但是任何更新都不会出现。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21559790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档