选择不在筛选列表上初始化

时间:2018-01-12 16:21:40

标签: angularjs

以下代码段有效,除了一个问题外,用户界面的下拉菜单不会初始化为模型的内容。模型已正确初始化,cookie已正确保存/加载。其余的代码已经工作了一段时间。我不知道为什么选择不会初始化。



app.controller("thisController",
    function ($scope, $http, $log, $rootScope, $location, $uibModal, $cookies) {
    
    $scope.saveCookie = function (key, value) {
        $cookies.putObject(key, value);
    }
    $scope.getCookie = function (key) {
        return $cookies.getObject(key);
    }
}

    <select class="form-control"
            id="yearDropdown"
            ng-model="selectedYear"
            ng-init="selectedYear=getCookie('selectedYear')"
            ng-change="saveCookie('selectedYear', selectedYear)"
            ng-options="contract.ContractYear for contract in contractList
                      | orderBy:'ContractYear'
                      | unique:'ContractYear'">
        <option value="">All years</option>
    </select>
&#13;
&#13;
&#13;

https://imgur.com/a/fsir4

1 个答案:

答案 0 :(得分:1)

<select> - 元素未使用从cookie加载的值进行初始化的原因是因为它尝试匹配初始化对象的对象引用引用contractList - 变量中的合同对象。由于初始化对象来自cookie,因此对象引用不匹配contractList中的任何对象。

要解决此问题,您可以指定ngOptions - 指令,它应该使用哪个属性来将对象相互匹配。您可以通过将track by [expr]附加到表达式来完成此操作。

因此,为了解决您的问题,您的模板应该看起来像这样:

<select class="form-control"
        id="yearDropdown"
        ng-model="selectedYear"
        ng-init="selectedYear=getCookie('selectedYear')"
        ng-change="saveCookie('selectedYear', selectedYear)"
        ng-options="contract.ContractYear for contract in contractList
                  | orderBy:'ContractYear'
                  | unique:'ContractYear'
                  track by contract.ContractYear">
    <option value="">All years</option>
</select>

如果你在contract - 对象(例如id)上有其他唯一标识符,你自然应该选择跟踪它。

注意:强烈建议您将ngInit逻辑移至控制器。